2017-04-04 53 views
0

我有一个多模块Maven项目,具有如下的结构:Maven的 - 依靠多模块聚合项目

projectA-parent 
    - module-1 
    - module-2 

而且我还有一个项目,我想在所有的模块,使projectA-parent作为运行时依赖项(这是一个Spring应用程序,并且projectA-parent中的每个模块都包含我希望能够自动装配的Spring服务)。

我想什么做的是一样的东西

<dependency> 
    <groupId>projectA-group</groupId> 
    <artifactId>projectA-parent</artifactId> 
    <scope>runtime</scope> 
</dependency> 

所以,如果我添加其他模块projectA-parent它会自动带来了作为一个运行时的依赖(即,我不希望有添加每个新模块作为我的Spring应用程序中的依赖项)。这样的事情可能吗?

回答

1

你将不得不使用

<dependencies> 
    <dependency> 
    <groupId>projectA-parent-groupId</groupId> 
    <artifactId>projectA-parent-artifactId</artifactId> 
    <type>pom</type> 
    </dependency> 
</dependencies> 

这将传递地在com.my:commons-deps声明的所有依赖关系添加到您当前的POM。

使用

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>...</groupId> 
      <artifactId>...</artifactId> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

作品作为一个简单的“包括”在你的依赖管理工件版本。因此,它不会在您的项目中添加任何依赖项。

UPDATE:

另一个aprroach是使用一个BOM(物料清单)。检查link的使用BOM。它隐藏在底部的某处。

您可以创建一个BOM列出了所有的模块,依赖关系,然后你可以包括BOM到您的pom.xml这样的:

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>your_bom_group_id</groupId> 
      <artifactId>your_bom_artifact_id</artifactId> 
      <version>you_bom_version</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 
+0

问题是模块不是'projectA-parent'的依赖关系,而是子模块。我当前的解决方案(可能是最好的/唯一的选择)是有一个“BOM”模块,将所有其他模块列为依赖项,然后将此BOM作为类型导入:pom/scope:import dependency,如同在答案中一样。依赖关系在BOM pom.xml中标记为范围:运行时。 – bobsyouruncle

1

我想我只想补充一点,提及到另一个模块在项目中的其它模块,如:

projectA-parent 
    - module-1 
    - module-2 
    - module-deps 

module-deps作为依赖于module-1module-2一个罐子或POM。 当您添加更多模块时,您必须更新module-deps,但至少它只能在一个地方。