我们正在使用,带有依赖项的 jar 构建将具有 META-INF/services/org.glassfish.jersey.internal.spi.AutoDiscoverable,值为“a.b.client.sdk.common.client.AutoConfigService”
基本上它也应该具有“org.glassfish.jersey.jackson.internal.JacksonAutoDiscoverable”的值
看起来 org.glassfish.jersey.internal.spi.AutoDiscoverable 的键没有发生附加或合并值。
我们如何才能使其同时具有这两个值?
以下是我们使用插件的方式。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>assemble-all</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifestEntries>
<Multi-Release>true</Multi-Release>
</manifestEntries>
</archive>
</configuration>
</execution>
<execution>
<id>assemble-dist-zip</id>
<phase>verify</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/main/assembly/app-zip-assemble.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
如何用maven插件实现,所以我的期望是, META-INF/services/org.glassfish.jersey.internal.spi.AutoDiscoverable 以保留来自不同工件的值,如下所示。
a.b.client.sdk.common.client.AutoConfigService org.glassfish.jersey.jackson.internal.JacksonAutoDiscoverable
您可以使用这样的解决方法:
创建一个名为 ${PROJECT_DIR}/AutoDiscoverable.txt 的文件,其中包含您想要的内容:
a.b.client.sdk.common.client.AutoConfigService org.glassfish.jersey.jackson.internal.JacksonAutoDiscoverable
然后使用以下部分运行 mvn package 而不是 pom.xml 中的程序集插件:
这将从包中排除原始 org.glassfish.jersey.internal.spi.AutoDiscoverable 文件,并将其替换为您手动创建的文件。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/services/org.glassfish.jersey.internal.spi.AutoDiscoverable</exclude>
</excludes>
</filter>
</filters>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
<resource>META-INF/services/org.glassfish.jersey.internal.spi.AutoDiscoverable</resource>
<file>AutoDiscoverable.txt</file>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>