У меня есть проект Maven на основе Spring -WS, который я хочу упаковать как единую банку. В eclipse все работает правильно. Когда я пытаюсь упаковать его как исполняемый банку, я получаю исключения ClassNotFound, поскольку банки Spring не включены в jar приложения.
Итак, я добавил maven-shade-plugin, чтобы включить все мои зависимости в мою банку приложения. Когда я смотрю на свою банку приложений, я вижу все файлы классов из всех включенных зависимостей (все библиотеки 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, которые переопределяют друг друга. Следовательно, моя последняя банка имеет неполный файл spring.schemas.
Поэтому, когда я пытаюсь запустить исполняемый банку, я получаю сообщения об ошибках Spring, что файлы не могут быть найдены, так как файл spring.schemas является неполным (банкомат Spring -WS превзошел Spring - core spring.schemas file).
Моя исполняемая банка 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
Я в тупике. Я не уверен, что/как я могу упаковать все как единую исполняемую банку. Я не знаю, является ли это проблемой конфигурации плагинов в тени или если я пытаюсь сделать что-то невозможное. Не похоже было бы, что мне пришлось бы вручную создать собственный spring.schemas файл (конкатенация других).
Возможно, я немного подпрыгнул. Выявив больше информации о плагине теней, я заметил AppendingTransformer, который я ранее пропустил. Однако моя озабоченность заключается в том, как узнать, какие другие файлы имеют одинаковые проблемы? Я обнаружил/поймал эту проблему Spring. Я понятия не имею о каких-либо других библиотеках, которые могут делать что-то подобное...
Любые предложения будут оценены.