当前位置: 首页 > 知识库问答 >
问题:

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

欧渝
2023-03-14

根据我的理解,包含/排除只是白名单/黑名单,所以我不能显式地强制包含一些没有包含在实际依赖列表中的内容。

为了获得更多的上下文,我有一个JAR依赖项,它包含一个资源,我只希望它包含在我的shade工件中,但是在类路径上使用该JAR会导致错误。

明确地说,我希望在一个MVN Package调用中生成一个带有附加依赖项的阴影jar,以及一个没有附加依赖项的普通jar。

共有1个答案

顾亦
2023-03-14

尝试使用一个配置文件,并使您的依赖和阴影只在该配置文件。例如:

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

其他依赖于此的项目可以依赖于阴影或未阴影的工件(视情况而定),因为您正在使用一个分类器来生成这两个工件。

 类似资料:
  • 问题内容: 我想使用maven shade创建一个有阴影的jar,但我也想仅在有阴影的jar的情况下才包含一个特殊的依赖项(而不是在我项目的普通编译依赖项中)。我该怎么办? 根据我的理解,包含/排除项只是白名单/黑名单,因此我无法明确强制要包含的内容未包含在实际依赖项列表中。 对于更多上下文,我有一个JAR依赖项,其中包含只希望包含在我的一个阴影工件中的资源,但是如果在类路径中使用该jar会导致错

  • 问题内容: 有没有一种方法可以强制maven(2.0.9)将所有依赖项包含在单个jar文件中? 我有一个构建到单个jar文件中的项目。我希望将依赖项中的类也复制到jar中。 更新:我知道我不能只在jar文件中包含jar文件。我正在寻找一种方法来解压缩指定为依赖项的jar,并将类文件打包到我的jar中。 问题答案: 你可以使用带有描述符的插件来执行此操作。这是我们之一的相关块,它可以完成此任务:

  • 我在我的项目中使用了maven shade插件将所有依赖项jar类重新定位到一个包下,例如org.shade.* 当我试图在其他应用程序中使用带阴影的jar作为maven依赖项时,它会拉出依赖项jar的。 我的期望是,当Uber/shaded jar包含为maven依赖项时,它不应该拉出任何其他依赖类jar,因为这些类已经在shaded jar中重新打包了。

  • 我试图将某些类排除在阴影jar之外。 我尝试了几种不同的配置,但出于某种原因,jar仍然包含在我的jar中。以下是插件设置: 我还尝试了以下模式: 这些都没有真正从我的jar中排除该文件。如何从我的 jar 中排除此类?

  • 我正在开发一个Java项目,使用maven作为依赖项管理器/构建工具。我当前在将依赖项的依赖项解析到正确版本时遇到问题。 有问题的依赖项称为JasperReports-Functions-6.1.0.jar,它不是托管在maven repo中,而是以jar形式提供的。 如何强制jar依赖项使用子依赖项的某个版本?

  • 我的项目依赖于另一个项目的阴影JAR。另一个项目使用shade插件将一些的包中的所有类重新定位到。 这是意料之中的行为吗?有没有一种方法可以阻止这种传递阴影? 其他项目的阴影插件: