maven spring - 找不到元素'beans'的声明

时间:2011-02-11 17:18:33

标签: xml spring maven-2 schema maven

我有一个使用maven构建的spring项目(打包为jar)(依赖项被复制到一个单独的目录并添加到classpath中)

我想以java -jar

运行它

问题在于,当我运行它时,我得到:

引起:org.xml.sax.SAXParseException:cvc-elt.1:找不到声明  元素'豆'。

这是因为spring.schemas和spring.handlers位于几个罐子里,即:弹簧豆等。

有没有办法解决它,假设我不想使用shade插件来解压所有依赖项并连接spring.schemas和spring.handlers的内容?

我还想避免在我的项目中保存xsd文件并将schemaLocation更改为指向我的位置。

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:camel="http://camel.apache.org/schema/spring"
    xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

    <camel:camelContext>
        <camel:routeBuilder ref="fakeRouteBuilder"/>
    </camel:camelContext>

    <bean id="fakeRouteBuilder" class="<className>" />


</beans>

10 个答案:

答案 0 :(得分:24)

我知道有两种情况可以解决这个问题

  • 如果您没有互联网连接(例如,在代理服务器后面)。在这种情况下,请下载XSD,将其复制到XML旁边,然后将架构位置更改为xsi:schemaLocation=" http://www.springframework.org/schema/beans spring-beans-2.5.xsd ..."
  • 如果你有互联网连接/仍然有问题,那是因为你为XSD和jar使用不同版本的Spring。

答案 1 :(得分:8)

我认为XSD将成为弹簧罐的一部分,所以不应该是问题。

答案 2 :(得分:5)

Spring jar包含META-INF / spring.handlers和META-INF / spring.schemas文件。为了避免在将依赖项聚合到一个jar时覆盖文件,可以使用maven Shade插件:

http://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html#AppendingTransformer

答案 3 :(得分:2)

遇到同样的问题因为我在代理后面。我在Tomcat 6下运行了一个Spring MVC应用程序。只需在我的 catalina.bat 文件中添加以下行,这就解决了我的问题:

set JAVA_OPTS=%JAVA_OPTS% -Dhttp.proxyHost=XXXX -Dhttp.proxyPort=YYYYY -Dhttp.proxyUser=ZZZZ -Dhttp.proxyPassword=XXXXXX

答案 4 :(得分:1)

我能够通过清除远程资源缓存中的xsd文件来解决类似的问题,Window&gt;偏好&gt;一般&gt;网络连接&gt;高速缓存

答案 5 :(得分:1)

maven-assembly-plugin生成的

META-INF/INDEX.LIST文件也可能是罪魁祸首。

原因:Java错误:&#34; ClassLoader.getResources()在使用jar索引时只返回1个实例&#34;

解决方案:禁用程序集描述符中的索引:

<indexed>false</indexed>

资源: Spring JIRA SPR-5705 JDK-6957241 ClassLoader.getResources() returns only 1 instance when using jar indexing

答案 6 :(得分:0)

您的XSD声明中有http://太多了。试试这个:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:camel="http://camel.apache.org/schema/spring"
    xsi:schemaLocation="
       http://www.springframework.org/schema/beans    
       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://camel.apache.org/schema/spring
       http://camel.apache.org/schema/spring/camel-spring.xsd">

(你的是http://http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

答案 7 :(得分:0)

当我的XSD url指向与jar文件中定义的XSD位置不同的不同位置时,我收到了该错误。例如,spring-beans-3.0.xsd而非spring-beans-2.5.xsd反之亦然。

答案 8 :(得分:0)

您也可以使用here的建议来解决此问题

答案 9 :(得分:0)

我有完全相同的问题,我认为这是由两个主要原因引起的:

  • 对于spring-security依赖项和XSD文件引用,您有不同的版本。
  • 如果您使用不同版本的spring common framework和spring-security,也会发生这种情况。