【问题标题】:Maven Include Dependency in Shaded Jar OnlyMaven 仅在 Shaded Jar 中包含依赖项
【发布时间】:2016-06-04 10:03:57
【问题描述】:

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

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

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

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

【问题讨论】:

  • 然后修正你的错误。老实说,越简单越好。使用配置文件会起作用,但它会使一切变得比它需要的更复杂。避免变通方法。让您的生活更轻松。
  • 这不是你可以“修复”的。这些本质上是两个罐子中包含的相互排斥的配置。要发布的二进制文件之一需要特定配置,另一个则需要另一个。配置文件是解决方案,而不是解决方法。

标签: java maven jar maven-shade-plugin


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

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

【讨论】:

  • 谢谢,这几乎是我一直在寻找的东西,但是是否可以始终生成阴影工件以及未着色的工件,并使阴影工件成为唯一包含该依赖项的工件。 IE。有两个总是被执行的配置文件(默认 + 阴影)?
  • 上述问题的解决方案是使用配置文件并将其设置为 activeByDefault = true。谢谢!
  • 很高兴听到你想出了那部分 - 不确定我是否会认为这会奏效。我必须记住...
猜你喜欢
  • 2010-12-16
  • 2023-03-30
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
  • 2014-06-08
相关资源
最近更新 更多