2

我正在处理大量彼此密切相关的项目,并寻找一种方法来使用良好的 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”?请记住,所有模块都是“兄弟”,作为同一父模块的模块包含在内,并且同时编译。

提前谢谢了!卡尔斯

4

0 回答 0