Maven 仅在 Shaded Jar 中包含依赖项

Ham*_*ari 6 java jar maven maven-shade-plugin

我想使用 Maven Shadow 创建一个着色 jar,但我也想仅在着色 jar 的情况下包含特殊依赖项(而不是在我的项目的正常编译依赖项中)。我该怎么办?

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

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

需要明确的是,我希望在一次调用中生成一个带有附加依赖项的阴影 jar 和一个没有它的普通 jar mvn package

dcs*_*ohl 5

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

<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>
Run Code Online (Sandbox Code Playgroud)

现在,当您运行时,mvn -PshadeProfile package它将将该工件包含在着色构建中,并使用shaded新工件的分类器。这样,您的构建就可以生成没有问题资源的未着色 JAR,以及包含该资源的着色 JAR,只需打开配置文件即可。

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