我正在使用Maven2和Spring 3,当我在Eclipse中运行我的项目时,一切正常,但是当我使用assembly:assembly时,生成的jar会抛出以下异常:
Exception in thread "main"
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 4
in XML document from class path resource [beans.xml] is invalid; nested exception
is org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of
element 'beans'.
my beans文件看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- Beans Here -->
</beans>
此文件存储在src / main / resources
中我的pom.xml对spring有以下依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.0.3.RELEASE</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
为什么会发生这种情况的任何想法?如何解决?
更新:
进一步调查Google发现Spring和Maven在我的pom.xml中没有得到以下内容,尽管没有解决方案:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
<configuration>
<archive>
<manifest>
<mainClass>org.robert.xclades.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
答案 0 :(得分:2)
我遇到了同样的问题。使用shade插件有帮助,但我必须添加一个变换器,如http://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html中所述,以连接Spring的处理程序和模式文件。
答案 1 :(得分:2)
我发现使用Spring 2.5.6的一个解决方案是包含一个Spring jar而不是单独的jar。我不确定Spring 3.x是否有一个标志牌。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.6</version>
</dependency>
答案 2 :(得分:1)
问题似乎是,各种spring依赖项的META-INF文件夹中的每个不同的spring.handler和spring.schemas之间存在冲突。
我发现的技巧是通过在src / main / resources / META-INF中创建这些文件并将这些文件的内容复制并粘贴到这些文件中来覆盖这些文件。其次,使用maven-jar-plugin设置manifest的mainClass;和maven-shade-plugin,而不是maven-assembly-plugin。所以更新的pom.xml看起来像:
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>org.robert.xclades.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
所以现在需要的只是maven package
。