如何在Maven项目中定义通用配置

时间:2019-01-11 08:29:06

标签: java maven

我希望这是开始正确的地方和正确的讨论。

我想要的

我正在寻找一种好的/正确的方式来处理多个具有相同配置的maven项目,这是我的情况

  1. 设置具有源/目标编译版本的maven-compiler-plugin版本
  2. 设置maven-source-plugin将源附加到工件
  3. 定义本地存储库服务器
  4. 定义公共依赖关系(通过dependencyManagement和依赖关系)。

我做什么

我的第一个方法是创建一个多模块项目。但是由于模块实际上是独立的,因此在发布时(因此发布周期不是相同的),这似乎是增加的负担。我也未能确保我可以独立使用IntelliJ中的子模块,并且每个子模块都有自己的Jenkins工作。对我而言,它总是全部或全部都不是

第二种方法是/将要有单独的项目。这样可以简化IntelliJ中的编码,并且Jenkins可以为每个项目分配工作。

但是现在影响到孩子的对父pom的更改非常繁琐,因为其他所有项目都必须采用此更改才能更改为新的父。

这是可行的,也许是解决这个问题的方法,但是恐怕我在这里滥用了父概念,我想知道,是否有更好的方法在多个Maven项目中使用通用设置?

感谢阅读,我希望这是可以理解的

2 个答案:

答案 0 :(得分:3)

您可以使用here中所述的<scope>import</scope>重用来自不同pom的依赖项管理部分,但这仅适用于依赖项,而不能用于属性,存储库等。

恐怕没有比pom更好的方法来解决您的问题了。实际上,这是被广泛采用的方法。例如,Spring boot已经使用了很长时间。

您想做的一件事就是为该父pom提供良好的发布管理。确保您不依赖SNAPSHOT版本来停止现有项目。

答案 1 :(得分:2)

只需使用通用设置创建一个父POM,然后将其余的设置为单独。 将该POM作为具有pom包装的独立实体(在此级别没有子模块)单独发布到(本地)存储库。

Spring Boot parent POM为例。

您项目中唯一的更改就是将新的POM用作父POM。

<project ... >
  <parent>
      <groupId>my-group</groupId>
      <artifactId>my-parent</artifactId>
      <version>1</version>
  </parent>
  ...

但是请注意,在父POM中对依赖项进行硬编码通常不是一个好主意(通过dependencyManagement定义版本是可以的,但是请每个项目明确指定它实际需要的依赖项)。