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

Maven Include Dependency in Shaded Jar Only

我想使用 maven shade 创建一个 shaded jar,但我也想只在 shaded jar 的情况下包含一个特殊的依赖项(不在我的项目的正常编译依赖项中)。我该怎么做?

据我了解,includes/excludes 只是 whitelists/blacklists,因此我无法明确强制包含实际依赖项列表中未包含的内容。

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

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

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

<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,只需打开配置文件即可。

依赖于此的其他项目可以视情况依赖于着色或未着色工件,因为您正在使用分类器生成两者。