我有一个基于 Maven 的 Spring-WS 客户端项目,我想将其打包为单个 jar。在eclipse中,一切运行正常。当我尝试将其打包为可执行 jar 时,我得到 ClassNotFound 异常,因为 Spring jar 不包含在我的应用程序 jar 中。
所以我添加了maven-shade-plugin以在我的应用程序 jar 中包含我的所有依赖项。当我查看我的应用程序 jar 时,我看到了所有依赖项中的所有类文件(所有库 jar 都被分解了)。
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.cws.cs.Client</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
我的问题是,在打包过程中,我的多个 spring 依赖项有不同的 META-INF/spring.schemas文件,它们相互覆盖。因此,我的最终 jar 有一个不完整的 spring.schemas 文件。
因此,当我尝试运行我的可执行 jar 时,我收到 Spring 错误消息,指出由于 spring.schemas 文件不完整(Spring-WS 的 jar 覆盖了 Spring-core 的 spring.schemas 文件),因此找不到文件。
我的可执行 jar 的 META-INF/spring.schemas:
http\://www.springframework.org/schema/web-services/web-services-1.5.xsd=/org/springframework/ws/config/web-services-1.5.xsd
http\://www.springframework.org/schema/web-services/web-services-2.0.xsd=/org/springframework/ws/config/web-services-2.0.xsd
http\://www.springframework.org/schema/web-services/web-services.xsd=/org/springframework/ws/config/web-services-2.0.xsd
而不是 Spring-beans.jar META-INF/spring.schemas:
http\://www.springframework.org/schema/beans/spring-beans-2.0.xsd=org/springframework/beans/factory/xml/spring-beans-2.0.xsd
http\://www.springframework.org/schema/beans/spring-beans-2.5.xsd=org/springframework/beans/factory/xml/spring-beans-2.5.xsd
http\://www.springframework.org/schema/beans/spring-beans-3.0.xsd=org/springframework/beans/factory/xml/spring-beans-3.0.xsd
http\://www.springframework.org/schema/beans/spring-beans-3.1.xsd=org/springframework/beans/factory/xml/spring-beans-3.1.xsd
http\://www.springframework.org/schema/beans/spring-beans.xsd=org/springframework/beans/factory/xml/spring-beans-3.1.xsd
http\://www.springframework.org/schema/tool/spring-tool-2.0.xsd=org/springframework/beans/factory/xml/spring-tool-2.0.xsd
http\://www.springframework.org/schema/tool/spring-tool-2.5.xsd=org/springframework/beans/factory/xml/spring-tool-2.5.xsd
http\://www.springframework.org/schema/tool/spring-tool-3.0.xsd=org/springframework/beans/factory/xml/spring-tool-3.0.xsd
http\://www.springframework.org/schema/tool/spring-tool-3.1.xsd=org/springframework/beans/factory/xml/spring-tool-3.1.xsd
http\://www.springframework.org/schema/tool/spring-tool.xsd=org/springframework/beans/factory/xml/spring-tool-3.1.xsd
http\://www.springframework.org/schema/util/spring-util-2.0.xsd=org/springframework/beans/factory/xml/spring-util-2.0.xsd
http\://www.springframework.org/schema/util/spring-util-2.5.xsd=org/springframework/beans/factory/xml/spring-util-2.5.xsd
http\://www.springframework.org/schema/util/spring-util-3.0.xsd=org/springframework/beans/factory/xml/spring-util-3.0.xsd
http\://www.springframework.org/schema/util/spring-util-3.1.xsd=org/springframework/beans/factory/xml/spring-util-3.1.xsd
http\://www.springframework.org/schema/util/spring-util.xsd=org/springframework/beans/factory/xml/spring-util-3.1.xsd
我难住了。我不确定是否/如何将所有内容打包为单个可执行 jar。我不知道这是否是一个阴影插件配置问题,或者我是否正在尝试做一些不可能的事情。我必须手动创建自己的 spring.schemas 文件(其他文件的串联)似乎不正确。
我可能有点过激了。在挖掘有关阴影插件的更多信息时,我注意到了我之前错过的AppendingTransformer 。但是,我关心的是如何知道哪些其他文件有同样的问题?我发现/发现了这个特殊的 Spring 问题。我不知道任何其他可能正在做类似事情的图书馆......
任何建议,将不胜感激。