我的问题非常类似于:仅当依赖项组装到单个 jar 中时才会抛出 Jersey 异常 https://stackoverflow.com/questions/12611213/jersey-exception-only-thrown-when-depencencies-assembled-into-a-single-jar
我运行我的应用程序(jetty嵌入+球衣)并且一切正常。当我尝试创建可执行 JAR 时,出现错误:
org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor
围绕写入
GRAVE:找不到媒体类型 = application/json、类型 = 类的 MessageBodyWriter
我的 POM.XML:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>server.application.DeepDig</mainClass>
</transformer>
</transformers>
<filters>
<!-- filter to address "Invalid signature file" issue - see https://stackoverflow.com/a/6743609/589215 -->
<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>
</plugins>
不久前我遇到了同样的问题。问题在于服务文件未合并。以下对我有用:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>Foo</mainClass>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
</transformers>
</configuration>
</plugin>
问题的根本原因是,几个与 Jersey 相关的 jar 文件中的每一个都在 META-INF 中包含一个“服务”文件,其中包含用于 Jersey 正常工作的元数据。默认情况下,shade 插件会选择这些文件之一并将其包含在 fat jar 中。由于不包含其他文件的元数据,Jersey 无法正常工作。
此修复包括调用阴影插件时的附加变压器。该转换器合并各个文件中的数据,而不是仅选择其中一个文件。这样,所有必需的元数据都包含在 fat jar 中,并且 Jersey 可以正常工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)