当前位置: 首页 > 面试题库 >

“无法找到Spring NamespaceHandler”错误

干鑫鹏
2023-03-14
问题内容

我正在用Spring创建一个独立的Sava应用程序,以处理JDBC访问。该应用程序在每次测试中都可以正常运行,因此我决定需要一个jar来部署我们的客户。

他们的类路径中可能没有spring,因此我使用maven-assembly-plugin处理具有依赖项的jar创建。

但是,当我尝试运行该应用程序时:

java -jar target/myproject-0.0.1-SNAPSHOT-jar-with-dependencies.jar

这将引发以下错误:

Exception in thread "main" org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/p]
Offending resource: class path resource [applicationContext.xml]

at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80)
...and so on to the database access class of this project.

applicationContext.xml文件位于projectbase / src / main /
resources中。并将其放置在目标/程序包名称库中。

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:p="http://www.springframework.org/schema/p"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">


    <bean id="dataSourceDesenv" class="org.apache.commons.dbcp.BasicDataSource"... />

    <bean id="simpleJdbcDaoSupport" class="org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport"
      p:dataSource-ref="dataSourceDesenv" />

    <bean id="simpleJdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate">
        <constructor-arg ref="dataSourceDesenv" />
    </bean>

</beans>

问题答案:

我发现了错误,该错误在于maven-
assembly插件
中的一个未修复的错误。我使用以下解决方法:

首先注释掉pom中的maven-assembly代码。然后,我使用maben-dependency-plugin将依赖项复制到目标的lib文件夹中:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/lib</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

然后,我使用maven-jar-plugin设置了我的可执行jar:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.3.1</version>
            <configuration>
                <archive>
                    <index>true</index>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>org.foo.myproject.App</mainClass>
                    </manifest>
                    <manifestEntries>
                        <mode>development</mode>
                        <url>${pom.url}</url>
                        <key>value</key>

                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>

最后,我创建了一个bash脚本,该脚本与该应用程序一起部署,该应用程序使用其libs和任何提供的参数来运行我的应用程序:

java -cp lib/*:myproject-0.0.1-SNAPSHOT.jar org.foo.myproject.App $@

我应该在python = /中构建该应用程序



 类似资料:
  • 下面是我的config.yml的一部分: 我有一个用于解析的类: 然而,当我跑的时候 发生以下错误: 为什么它抱怨找不到属性AuthenticationConfig而AuthenticationConfig只是实例变量的名称? 更新在我将实例变量从“private”更改为“public”后,它们被SnakeYaml识别,但这并不是我们所能肯定的。类不被识别为JavaBean。 更新我找到了根本原因

  • 问题内容: 我想连接我的java程序以连接数据库并检索数据。它的编译完美,但运行时即时得到这个 我已经安装了Java SQL驱动程序,并将jar路径作为CLASSPATH添加到环境变量中 问题答案: 您应该从这里下载驱动程序 和JAR文件需要添加到项目类路径。 首先,右键单击Eclipse Project,然后单击Project-> Build Path-> Configure Build Pat

  • 问题内容: 我使用的图像是基于。在附加到Docker容器的外壳上 我想这样做,所以我尝试安装但无法找到该软件包: 我们如何从该映像进行安装,为什么会丢失它? 猫/etc/apt/sources.list 猫/etc/apt/sources.list.d/* apt-cache麦迪逊git 问题答案: 发生这种情况是因为apt储存库尚未更新,通常的做法是在创建映像后清理apt储存库和tmp文件,而基

  • 当我正常运行此代码时,它会吐出: 异常线程"main"java.lang.ClassNotFoundExcture: bookReader 在java.net.URLClassLoader.find类(URLClassLoader.java:381) 在java.lang.ClassLoader.load类(ClassLoader.java:424)<在sun.misc.启动$AppClassLo

  • 所以我设定了我的道路 我不知道这是怎么回事...如有任何建议,不胜感激。

  • 我正在尝试使用ISOWeek,但在任何地方都找不到它。我尝试了几种不同的使用方法: 我已经尝试添加每一个系统。我可以找到运行时引用,但它总是给出这些错误: 错误CS0234:命名空间“系统”中不存在类型或命名空间名称“ISOWeek”。全球化“(是否缺少程序集引用?) 错误CS0103:名称“ISOWeek”在当前上下文中不存在 错误CS0246:找不到类型或命名空间名称'ISOYork'(您是否