erd*_*run 9 uberjar maven-3 maven maven-shade-plugin
我在我的项目中使用了 maven shade 插件来重新定位一个包下的所有依赖 jar 类,例如 org.shade.*
当我尝试在其他应用程序中使用该阴影 jar 作为 maven 依赖项时,它会拉取依赖项 jar。
我的期望是当 uber/shaded jar 作为 maven 依赖项包含时,它不应该拉任何其他依赖类 jar,因为这些类已经在 shaded jar 中重新打包。
经典场景是:
dependency
其pom.xml
文件中的元素),然后将它们打包在一个 uber-jar 中作为 Maven 工件dependency
另一个项目的依赖项(元素)时,Maven 将检查其<artifact>-<version>.pom
文件(与最终工件一起发布到 Maven 存储库中),这基本上是其原始pom.xml
文件的重命名副本,其中依赖项(dependency
元素) ) 已声明(正是打包到 uber-jar 中的依赖项)。由于您已经将它们打包,因此您希望忽略该.pom
文件(及其dependencies
元素),为此您需要添加exclusions
以下内容:
<dependency>
<groupId>com.sample</groupId>
<artifactId>something-uber</artifactId>
<version>some-version</version>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
Run Code Online (Sandbox Code Playgroud)注意:上述功能仅在 Maven 之后可用3.2.1
。
因此,您向 Maven 明确表示您不想要任何传递依赖,然后Maven 依赖中介不会触发它们。
附带说明:将 uber-jar 作为项目的依赖项并不是一个好习惯:它只会使维护变得更加困难,因为您无法通过依赖项目的顺序dependencyManagement
或dependencies
顺序来控制传递依赖项。因此,每当依赖项(其传递性之一)需要维护(更改版本等)并且对依赖项目的控制要少得多(同样,更难的维护)时,您将始终需要重新打包 uber jar。
归档时间: |
|
查看次数: |
5176 次 |
最近记录: |