Maven仅包含阴影罐中的依赖性

时间:2016-02-22 20:05:27

标签: java maven jar maven-shade-plugin

我想使用maven shade创建一个带阴影的jar,但我还想在shaded jar的情况下包含一个特殊的依赖项(不在我项目的正常编译依赖项中)。我怎么能这样做呢?

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

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

要清楚,我想在一次mvn package调用中生成带阴影的jar,带有额外的依赖项和没有它的普通jar。

1 个答案:

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

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