小编典典

Maven仅在阴影罐中包含依赖项

java

我想使用maven
shade创建一个有阴影的jar,但我也想仅在有阴影的jar的情况下才包含一个特殊的依赖项(而不是在我项目的普通编译依赖项中)。我该怎么办?

根据我的理解,包含/排除项只是白名单/黑名单,因此我无法明确强制要包含的内容未包含在实际依赖项列表中。

对于更多上下文,我有一个JAR依赖项,其中包含只希望包含在我的一个阴影工件中的资源,但是如果在类路径中使用该jar会导致错误。

明确地说,我希望在一个mvn package调用中生成具有附加依赖项的阴影jar和没有它的普通jar 。


阅读 238

收藏
2020-11-26

共1个答案

小编典典

尝试使用配置文件,并仅在该配置文件中使用依赖项和阴影。例如:

<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。

依赖于此的其他项目可以视情况而取决于阴影或非阴影工件,因为您正在使用分类器来生成两者。

2020-11-26