我在我的项目中使用了maven shade插件将所有依赖项jar类重新定位到一个包下,例如org.shade.*
当我试图在其他应用程序中使用带阴影的jar作为maven依赖项时,它会拉出依赖项jar的。
我的期望是,当Uber/shaded jar包含为maven依赖项时,它不应该拉出任何其他依赖类jar,因为这些类已经在shaded jar中重新打包了。
典型的场景是:
>
pom.xml
文件中的dependency
元素),然后将这些依赖项作为Maven工件一起打包在一个uber-jar中dependency
元素)时,Maven会检查其
-
.pom
文件(与最终的构件一起发布到Maven存储库中),该文件基本上是其原始pom.xml
文件的重命名副本,在该文件中声明了依赖项(dependency
元素)(正是封装到uber-jar中的依赖项)。由于您已经打包了它们,因此您希望忽略.pom
文件(及其依赖项
元素),为此您需要添加排除项
,如下所示:
<dependency>
<groupId>com.sample</groupId>
<artifactId>something-uber</artifactId>
<version>some-version</version>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
注意:上述特性仅在Maven3.2.1
之后才可用。
这样,您就向Maven表明了您不想要任何可传递依赖项,并且Maven依赖项中介将不会触发它们。
作为附带说明:使用uber-jar作为项目的依赖项不是一个好的实践:这只会使维护更加困难,因为您无法通过依赖项目的dependencymanagement
或dependencies
顺序控制可传递依赖项。因此,每当依赖项(其可传递项之一)需要维护(更改版本等等)时,您总是需要重新打包uber jar,并且对依赖项项目的控制要少得多(同样,更难维护)。
我的项目依赖于另一个项目的阴影JAR。另一个项目使用shade插件将一些的包中的所有类重新定位到。 这是意料之中的行为吗?有没有一种方法可以阻止这种传递阴影? 其他项目的阴影插件:
根据我的理解,包含/排除只是白名单/黑名单,所以我不能显式地强制包含一些没有包含在实际依赖列表中的内容。 为了获得更多的上下文,我有一个JAR依赖项,它包含一个资源,我只希望它包含在我的shade工件中,但是在类路径上使用该JAR会导致错误。 明确地说,我希望在一个调用中生成一个带有附加依赖项的阴影jar,以及一个没有附加依赖项的普通jar。
我正在使用Intellij社区版v2020.3.2和Java8。 我通过以下步骤添加外部jar文件,file- 执行在IDE中运行良好。但是当使用maven安装时会抛出错误“包包名不存在”。 我的pom。xml看起来像 当我移除外部jar时,maven安装工作正常。
在LoginStorageProviderFactory中,它有一个来自LoginStorageProvier的导入,在最后一个类中,它有一个来自外部项目(也是我的项目)中的用户类的导入。 如果我把这个用户类移到jar模块中,错误就会消失,并且一切都能很好地工作;但我的目标是将项目与用户在其他项目中的实现和EAR项目分离。 所以,我认为错误的原因是缺少依赖项,Maven不能解决它,也没有报告错误,
问题内容: 我想使用maven shade创建一个有阴影的jar,但我也想仅在有阴影的jar的情况下才包含一个特殊的依赖项(而不是在我项目的普通编译依赖项中)。我该怎么办? 根据我的理解,包含/排除项只是白名单/黑名单,因此我无法明确强制要包含的内容未包含在实际依赖项列表中。 对于更多上下文,我有一个JAR依赖项,其中包含只希望包含在我的一个阴影工件中的资源,但是如果在类路径中使用该jar会导致错
我需要在我的maven项目中添加大约15个罐子,它在远程和中央存储库中都不可用。 然而,我实现了以下目标:, > 在我的项目路径中添加了jars(\src\lib) 将pom更改如下, 我的问题是: 我是否需要像上面那样分别对所有15个JAR重复它,或者我们有任何其他方法来绑定这些JAR并将其作为一个依赖路径? Maven在这里讨论了同样的事情:指向多个JAR的系统依赖性。但我想知道我是否能得到更