我正在处理大量彼此密切相关的项目,并寻找一种方法来使用良好的 Maven 配置来减少维护开销。
我目前正在处理的一个场景是同一个“公司项目”中的一组几个小项目,其中大多数依赖于其他项目,每个项目都有一个很大的外部依赖项列表。
为了让它更干净,我创建了一个父 pom,将它们全部设置为模块,并在父的 dependencyManagement 部分中创建了一个大的依赖项列表,允许我删除项目 pom 中的大部分版本标签。
对我来说,下一个阶段是通过使用一些插件(例如 one-jar 或 assembly)来减少生成的 jar 的数量,以便从其中一个包含所有其他项目的项目中获取一个 signle jar。然而,这导致我有一个巨大的 jar,里面有大量的外部库,其中大部分已经由运行环境提供。我知道将<scope>provided</scope>
标签添加到外部依赖项的声明中可以完成这项工作,但我想避免在我的 pom.xml 中使用几十个这样的标签。
所以问题是:
- 有没有办法定义默认范围,所以我
compile
只能在我想要包含的库中使用范围?
然后,而不是这样:
<dependencyManagement>
<dependency>
<groupId>any.external</groupId>
<artifactId>lib</artifactId>
<version>1.0</version>
<scope>provided</scope> <!--Skip Inclusion-->
</dependency>
<dependency>
<groupId>any.external</groupId>
<artifactId>cool-lib</artifactId>
<version>1.0</version>
<scope>provided</scope> <!--Skip Inclusion-->
</dependency>
<dependency>
<groupId>another.external</groupId>
<artifactId>lib</artifactId>
<version>1.0</version>
<scope>provided</scope> <!--Skip Inclusion-->
</dependency>
<dependency>
<groupId>my.company</groupId>
<artifactId>some-dependency</artifactId>
<version>1.0</version>
</dependency>
</dependencyManagement>
我可以拥有这个(请注意,当我们只有 10 个内部项目要包含但超过 100 个外部库时,差异就会出现):
<dependencyManagement>
<dependency>
<groupId>any.external</groupId>
<artifactId>lib</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>any.external</groupId>
<artifactId>cool-lib</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>another.external</groupId>
<artifactId>lib</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>my.company</groupId>
<artifactId>some-dependency</artifactId>
<version>1.0</version>
<scope>compile</scope><!-- Include It! -->
</dependency>
</dependencyManagement>
- 或者更好:也许我跳过了一些东西,并且已经有一种方法可以告诉 maven:“仅包括当前项目中生成的 jars”?请记住,所有模块都是“兄弟”,作为同一父模块的模块包含在内,并且同时编译。
提前谢谢了!卡尔斯