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

Java 如何在maven项目中定义通用配置,java,maven,Java,Maven,我希望这是一个正确的地方和正确的讨论开始 我想要什么 我正在寻找一种好的/正确的方法来处理多个maven项目,它们共享一个公共配置,这就是我的例子 将maven编译器插件版本设置为源/目标编译版本 将maven源插件设置为将源附加到工件 定义本地存储库服务器 定义通用依赖项(通过依赖项管理和依赖项) 我所做的 我的第一个方法是创建一个多模块项目。但是,由于模块实际上是独立的,当涉及到发布时(因此不是相同的发布周期),它似乎更像是一个负担,而不是一个收益。我也没能使我能够独立处理IntelliJ中

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

我想要什么

我正在寻找一种好的/正确的方法来处理多个maven项目,它们共享一个公共配置,这就是我的例子

  • 将maven编译器插件版本设置为源/目标编译版本
  • 将maven源插件设置为将源附加到工件
  • 定义本地存储库服务器
  • 定义通用依赖项(通过依赖项管理和依赖项)
  • 我所做的

    我的第一个方法是创建一个多模块项目。但是,由于模块实际上是独立的,当涉及到发布时(因此不是相同的发布周期),它似乎更像是一个负担,而不是一个收益。我也没能使我能够独立处理IntelliJ中的一个子模块,并让每个子模块都有自己的Jenkins工作。对我来说,一切都有可能

    第二种方法是有单独的项目。这使得IntelliJ中的编码变得简单,Jenkins可以为每个项目提供工作

    但是现在,对父pom的更改会影响到子pom,因为所有其他项目都必须适应对新父pom的更改,所以委派这些更改非常繁琐

    这是可行的,并且可能是解决这个问题的方法,但是我担心我在这里误用了父概念,我想知道,是否有更好的方法在多个maven项目中使用公共设置


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

    只需创建一个具有公共设置的父POM,并将其余部分分开即可。 使用
    POM
    打包(此级别没有子模块)将该POM作为独立实体单独发布到(本地)存储库中

    请看下面的示例

    项目中唯一的变化就是使用新的POM作为父POM

    <project ... >
      <parent>
          <groupId>my-group</groupId>
          <artifactId>my-parent</artifactId>
          <version>1</version>
      </parent>
      ...
    
    
    我的小组
    我的父母
    1.
    ...
    

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

    您可以使用
    导入
    从不同的POM重用依赖项管理部分,如上所述,但这只适用于依赖项,而不能用于属性、回购等

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

    您要做的一件事是对父pom进行良好的发布管理。确保不依赖于
    快照
    版本来阻止现有项目