Maven 的 Jersey 问题 - Shade 插件
Jersey problems with Maven - Shade Plugin
我的问题非常类似于:Jersey exception only thrown when depencencies assembled into a single jar
我 运行 我的应用程序(嵌入式码头 + 球衣)一切正常。当我尝试创建可执行 JAR 时出现错误:
org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor
aroundWriteTo
GRAVE: MessageBodyWriter not found for media type=application/json, type=class
我的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 -->
<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 中包含一个 "services" 文件,其中包含 Jersey 正常工作所需的元数据。默认情况下,shade 插件会选择其中一个文件并将其包含在 fat jar 中。由于不包括来自其他文件的元数据,因此 Jersey 无法正常工作。
此修复包括调用阴影插件时的附加 t运行sformer。这个 t运行sformer 合并了各种文件中的数据,而不是只选择其中一个文件。这样,所有必需的元数据都包含在 fat jar 中,并且 Jersey 可以正常工作。
我的问题非常类似于:Jersey exception only thrown when depencencies assembled into a single jar
我 运行 我的应用程序(嵌入式码头 + 球衣)一切正常。当我尝试创建可执行 JAR 时出现错误:
org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor aroundWriteTo GRAVE: MessageBodyWriter not found for media type=application/json, type=class
我的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 -->
<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 中包含一个 "services" 文件,其中包含 Jersey 正常工作所需的元数据。默认情况下,shade 插件会选择其中一个文件并将其包含在 fat jar 中。由于不包括来自其他文件的元数据,因此 Jersey 无法正常工作。
此修复包括调用阴影插件时的附加 t运行sformer。这个 t运行sformer 合并了各种文件中的数据,而不是只选择其中一个文件。这样,所有必需的元数据都包含在 fat jar 中,并且 Jersey 可以正常工作。