如何在不编译根项目的情况下编译maven项目?

时间:2018-01-23 13:09:43

标签: java maven intellij-idea maven-3

我有15个项目的层次结构(-ear,-web,javaFX应用程序,公共库),所以它就像一个普通的maven树:

PROJECT-ROOT
- PROJECT1
-- PROJECT1-EAR
-- PROJECT1-WEB
- PROJECT2
-- PROJECT2-EAR
-- PROJECT2-WEB
- PROJECT3-COMMON-LIB
- PROJECT4-JAVAFX

除了PROJECT-ROOT之外,每个项目都有自己的父项。事情是,为了编译PROJECT4-JAVAFX我需要在根项目上运行编译,这需要一些额外的时间并且已经烦人了。如果我在子项目PROJECT4-JAVAFX中运行编译(或打包任何内容),它不能只找到PROJECT3-COMMON-LIB,因为它在依赖项列表中,并且失败并带有ERROR。

我怎么解决这个问题?我在开发过程中需要能够编译maven项目树的一部分。我的IDE是IntelliJ,但显然不重要,但热插拔也应该有效。

有可能mvn install它,但是来吧,我正在开发,我还不想触摸我的本地存储库。

更新: 所以再一次澄清。我想要实现的目标:

能够为一个特定模块编译仅依赖和更改的模块。我不想跟踪这些更改,我想将其留给构建工具。最后一件事是清理/编译整个项目。

但是我在IntelliJ中找到了 - Resolve workspace conflicts。它只是编译依赖模块(它的Maven配置)。

2 个答案:

答案 0 :(得分:1)

为什么不使用mvn install?它将编译,打包并将工件发布到本地存储库。在您这样做之前,特定模块不会 可用于其他maven项目作为依赖。

此外,您只需要构建一次root。这将构建和发布所有子模块。除非你在那里改变一些东西,否则你不需要再建造它们。之后,您应该只编译/打包所需的子模块(在您的情况下,PROJECT4-JAVAFX)。

此外,我认为您不需要在第一次使用后明确使用 mvn install 。如果您在Eclipse中选择了自动构建(不确定IntelliJ),它应该调用maven builder来自动构建项目和任何依赖项目。

答案 1 :(得分:0)

如果您不想install模块,可以从根项目文件夹中调用maven,如下所示:

mvn --projects subtwo,subone package

subtwo取决于subone

您可以阅读herehere命令。

但是我不介意在我的本地存储库中添加仍在开发中的项目,就像我看到的那样,这正是它的用途。