Заштрихованный jar не может найти Spring NamespaceHandler для пространства имен XML-схемы [http://www.springframework.org/schema/data/jpa ]

#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. Наслаждайтесь 🙂