【问题标题】:Shaded jar Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/data/jpa]阴影 jar 无法找到 XML 模式命名空间的 Spring NamespaceHandler [http://www.springframework.org/schema/data/jpa]
【发布时间】:2019-08-08 20:24:54
【问题描述】:

当我使用 maven-shaded-plugin 将我的所有依赖项(包括 spring-data-jpa.jar)打包在一个 jar 中并放在 WEB-INF/lib 目录下时,我在 Tomcat 中运行的 Web 应用程序中遇到了上述异常。

如果我将 spring-data-jpa.jar 与我的阴影 jar 一起直接打包到 WEB-INF/lib 中,问题就会消失?

NOTE: I will be running the same package as AWS Lambda hence I need to create a shaded jar.

【问题讨论】:

    标签: spring-data-jpa classpath maven-shade-plugin


    【解决方案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>
    

    Above 会将所有处理程序合并到最终 jar 中的一个文件中。享受:-)

    【讨论】:

      猜你喜欢
      • 2017-02-18
      • 2012-02-05
      • 2013-11-06
      • 2015-10-29
      • 2013-04-16
      • 2013-10-04
      • 2019-01-27
      • 2015-02-25
      • 2017-10-05
      相关资源
      最近更新 更多