Maven:Package";“兄弟”;项目

Maven:Package";“兄弟”;项目,maven,dependency-management,onejar,Maven,Dependency Management,Onejar,我正在处理一大组彼此密切相关的项目,并寻找一种方法,使用良好的maven配置将维护开销降至最低 我目前正在研究的一个场景是同一个“公司项目”中的一组小项目,其中大多数项目依赖于其他项目,每个项目中都有一个外部依赖性的大列表 为了使它更干净,我创建了一个父pom,将它们全部设置为模块,并在父pom的dependencyManagement部分中创建了一个依赖项的大列表,允许我删除项目pom中的大多数版本标记 对我来说,下一步是通过使用一些插件(比如一个jar或程序集)来减少结果jar的数量,以便从

我正在处理一大组彼此密切相关的项目,并寻找一种方法,使用良好的maven配置将维护开销降至最低

我目前正在研究的一个场景是同一个“公司项目”中的一组小项目,其中大多数项目依赖于其他项目,每个项目中都有一个外部依赖性的大列表

为了使它更干净,我创建了一个父pom,将它们全部设置为模块,并在父pom的dependencyManagement部分中创建了一个依赖项的大列表,允许我删除项目pom中的大多数版本标记

对我来说,下一步是通过使用一些插件(比如一个jar或程序集)来减少结果jar的数量,以便从其中一个包含所有其他jar的项目中获得一个单jar。然而,这让我有了一个enourmous jar,里面有大量的外部库,其中大部分已经由运行环境提供。 我知道将
提供的
标记添加到外部依赖项声明中可以完成这项工作,但我希望避免在POM中有几十个这样的标记

因此,问题是:

  • 有没有办法定义一个默认范围,这样我就可以只在我想要包含的libs中使用
    compile
    scope
然后,不要这样做:

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

任何外部的
解放党
1
假如
任何外部的
酷库
1
假如
另一个
解放党
1
假如
我的公司
某种依赖
1
我可以这样做(请注意,当我们只包含10个内部项目,但包含100多个外部LIB时,会出现差异):


任何外部的
解放党
1
任何外部的
酷库
1
另一个
解放党
1
我的公司
某种依赖
1
编译
  • 或者更好:也许我跳过了一些东西,并且已经有一种方法告诉maven:“只包括当前项目中生成的JAR”? 请记住,所有模块都是“兄弟”,作为同一父级的模块包含,并在同一时间编译
非常感谢!
Carles

这听起来更像是maven多模块构建的工作。你是什么意思?据我所知,它已经是一个多模块构建。唯一的问题是,我希望所有模块都打包在一个单独的jar中,而不是生成多个模块。如果您想将所有模块打包到一个zip/tar.gz归档文件中,那么您应该创建一个单独的模块模块,并定义与其他模块的依赖关系,然后使用maven assembly插件创建归档文件(请参阅)。好的,这个想法是要有一个可执行的jar,所以这个解决方案并不完全符合我的要求。目前,我使用“一个jar”插件获得了一个包含模块的可执行jar,所以我当前的问题是必须用那些“提供的”来填充我所有的pom文件范围标记。汇编插件提供了一个定义的描述符,称为jar和依赖项。此外,为了满足您的需求,更好的方法是使用maven shade插件实现这些目的。
<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>