#spring-data-jpa #classpath #maven-shade-plugin
#spring-data-jpa #путь к классу #maven-shade-plugin
Вопрос:
Я получаю указанное выше исключение в моем веб-приложении, запущенном в Tomcat, при упаковке всех моих зависимостей, включая spring-data-jpa.jar в одном jar с использованием maven-shaded-plugin и поместить в каталог WEB-INF / lib.
Проблема исчезает, если я упаковываю spring-data-jpa.jar непосредственно в WEB-INF / lib вместе с моим заштрихованным jar?
NOTE: I will be running the same package as AWS Lambda hence I need to create a shaded jar.
Ответ №1:
Чтобы помочь другим, проблема заключалась в том, что несколько файлов spring-*.jar META-INF/spring.handlers
-файлов, которые перезаписывают друг друга при запуске maven-shade-plugin
.
Чтобы разрешить использование <transformers>
в конфигурации плагина. Моя окончательная конфигурация плагина выглядит следующим образом;
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<!-- Remove signatures from transitive dependencies and append spring handlers and schemas -->
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
</transformers>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
Выше будут объединены все обработчики в один файл в конечном jar. Наслаждайтесь 🙂