我想使用maven shade创建一个带阴影的jar,但我还想在shaded jar的情况下包含一个特殊的依赖项(不在我项目的正常编译依赖项中)。我怎么能这样做呢?
根据我的理解,包含/排除只是白名单/黑名单,因此我无法明确强制包含未包含在实际依赖列表中的内容。
对于更多上下文,我有一个JAR依赖项,其中包含一个我只想包含在我的一个阴影工件中的资源,但是在类路径上使用该jar会导致错误。
要清楚,我想在一次mvn package
调用中生成带阴影的jar,带有额外的依赖项和没有它的普通jar。
答案 0 :(得分:2)
尝试使用配置文件,并仅在该配置文件中具有依赖关系和阴影。例如:
<profiles>
<profile>
<id>shadeProfile</id>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>some-artifact</artifactId>
<version>1.23</version>
</dependency>
</dependencies>
<build>
<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>
<shadedClassifierName>shaded</shadedClassifierName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
现在,当您运行mvn -PshadeProfile package
时,它会将工件作为着色构建的一部分包含在内,并使用分类器shaded
作为新工件。通过这种方式,您的构建可以在没有有问题的资源的情况下生成无阴影的JAR,并且只需打开配置文件就可以生成带有该资源的着色JAR。
依赖于此的其他项目可以根据需要依赖于着色或无阴影的工件,因为您使用分类器来生成两者。