Java 在本地生成时自动重新生成依赖项目

Java 在本地生成时自动重新生成依赖项目,java,maven,maven-3,Java,Maven,Maven 3,我有几个Maven项目,它们共享一个共同的父项目,如下所示: project-parent project-1 project-2: includes project-1 project-3: includes project-2 例如,project-3在其依赖项中有project-2,而project-2在其依赖项中有project-1 当我将一个项目推送到git时,Jenkins会自动重建为相关项目。例如,当我按下project-3,将重建project-2。因此

我有几个Maven项目,它们共享一个共同的父项目,如下所示:

project-parent
    project-1
    project-2: includes project-1
    project-3: includes project-2
例如,
project-3
在其依赖项中有
project-2
,而
project-2
在其依赖项中有
project-1

当我将一个项目推送到
git
时,
Jenkins
会自动重建为相关项目。例如,当我按下
project-3
,将重建
project-2
。因此,
project-1
也将重建。这是因为Jenkins了解依赖关系图

然而,当我在我的开发机器上本地构建
project-3
时,我还必须记住重建
project-2
(和
project-1

我可以向父项目添加一个
部分,然后简单地重建父项目。这将重建整个项目,包括所有子项目。然而,我宁愿不这样做,因为有很多项目,其中一些需要大量的时间来建设


所以我想构建一个项目(我正在处理的项目),并以某种方式自动(或方便地)重建所有依赖的项目,类似于Jenkins行为。基本上,我希望在我的开发机器上本地实现Jenkins行为。这是可能的吗?

您还可以创建一个完全独立于其他聚合器的聚合器:每个聚合器都指向包含
pom.xml
的文件夹路径(也可以直接指向pom.xml)


...
项目父级
项目-1
项目-2
项目-3
...
在这个场景中,从该聚合器构建将允许maven充分了解您的依赖关系图并按顺序构建。您只需注意正确更新版本以确保其匹配(如果project-2依赖于project-1的版本2,而project-1在版本3中,那么这将不起作用)


您不需要放置您不想要的模块,但是请注意,如果模块有子模块,它也会构建它们。

您可以从父项目执行以下命令(假设您在
中有my child模块)…

mvn清洁安装-pl我的子模块-am

此命令将生成项目
我的子模块
及其依赖项

-pl,--项目
构建指定的反应堆项目,而不是所有项目

-am,--也使
如果指定了项目列表,还可以生成列表所需的项目

-amd,--也可以成为受抚养人 如果指定了项目列表,还可以生成依赖于列表中项目的项目


构建父项目所有子项目都将自动构建。@Sambit如前所述,我希望避免这种情况,因为这将构建所有子项目,这需要很多时间。我可以使用-pl选择特定项目,但这有点回避我的问题,因为我必须记住要这样做(我还必须知道依赖关系图)。对于Jenkins或任何CI CD方法,您应该构建整个项目,或者您必须将小模块作为独立项目分开。此外,在maven reactor中,您只剩下-pl选项。请注意,Eclipse等IDE允许您执行“工作区解析”,这意味着依赖项将自动替换为工作区元素。这不是重建,但很有帮助。谢谢,但这不是我真正的问题。正如您所解释的,我的目标不是自动重建整个项目。我的目标是(递归地)建立一个项目和所有依赖的项目.我知道。但如果您不想修改父pom(即使是本地的,也不打算发布),则需要记住这是一个解决方案。您也可以使用-am或-amd,但如果执行目录中的项目以某种方式引用其他项目,这将真正起作用。这实际上是一个好主意。我不完全理解我可以创建一个新项目,只引用模块。这不会影响现有项目。我没有足够的声誉进行投票不幸的是。无论如何,谢谢你的想法,我将结合两个答案:单独的模块专用项目和使用
-am
/
-amd
。谢谢你。这可能就是我正在关注的!这个
-am
会递归地构建依赖项目吗?@Jekker我添加了一些文档,老实说,我不确定它是否是递归的。试试我t!照我们说的做:)。谢谢,谢谢。
<project> 
  ...
  <modules>
    <module>project-parent</module>
    <module>project-1</module>
    <module>project-2</module>
    <module>project-3</module>
  </modules>
  ...
</project>