我想使用maven shade创建一个有阴影的jar,但我也想仅在有阴影的jar的情况下才包含一个特殊的依赖项(而不是在我项目的普通编译依赖项中)。我该怎么办?
根据我的理解,包含/排除项只是白名单/黑名单,因此我无法明确强制要包含的内容未包含在实际依赖项列表中。
对于更多上下文,我有一个JAR依赖项,其中包含只希望包含在我的一个阴影工件中的资源,但是如果在类路径中使用该jar会导致错误。
明确地说,我希望在一个mvn package调用中生成具有附加依赖项的阴影jar和没有它的普通jar 。
mvn package
尝试使用配置文件,并仅在该配置文件中使用依赖项和阴影。例如:
<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。
mvn -PshadeProfile package
shaded
依赖于此的其他项目可以视情况而取决于阴影或非阴影工件,因为您正在使用分类器来生成两者。