2017-02-20 96 views
1

我使用Maven的多模块构建像下面跳过未修改模块的maven build?

<modules> 
     <module>module1</module> 
     <module>module2</module>// dependant on module 1   
     <module>module3</module>// dependant on module 2 
     <module>warApplication</module>// its a war file dependant on above modules 
    </modules> 

目前的生成行为: - 如果我让只在模块1的变化,Maven会建连模块2,单词数源文件,然后把模块1,模块2,在warApplication/target/lib下的module3 jar文件。

当我触发构建时,是否有配置/方式,如果没有跳过该模块,maven将验证模块下是否有任何文件被修改。对于war文件,它会把特定的 lib文件修改过来。这将节省很多时间。

要检查是否有任何文件在模块下被修改,maven可以存储最后的编译时间。在开始构建之前,它会检查是否有任何文件在上次构建时间戳后被修改,如果是,则构建它,否则跳过它。

是否有任何maven插件可用于此?

更新: -

我的项目结构是

TopFolder 
.mvn directory -> extensions.xml 
build directory->build-Projects-> pom.xml 
build directory-> parent -> pom.xml 
modules - > module1 -> pom.xml 
modules - > module2 -> pom.xml 
modules - > module3 -> pom.xml 

这里是我的,包括父POM

<modules> 
     <module>../../modules/module1</module> 
     <module>../../modules/module2</module> 
</modules> 

模块。我已经包括SCM标签<developerConnection>scm:svn:https://comp.com/svn/trunk</developerConnection>在以下两个项目

build directory->build-Projects-> pom.xml 
build directory-> parent -> pom.xml 

build directory->build-Projects-> pom.xml建立运行所。 但问题是,当我更改任何文件的任何模块,并从build directory-> pom.xml运行生成,其未检测模块更改?

+0

我知道,这不是一个答案,但尝试gradle。 至少它会跳过重建未触及的模块。 – glebiuskv

+1

你应该考虑即使你没有触及模块2,构建的结果可能会有所不同。首先,模块2的构建可能会因为您更改模块1调用的某个类而中断。同样,由于相同的原因,模块2的测试可能会通过或中断,具体取决于模块1.此外,还存在一些较少的问题就像使用模块2中模块1的公共常量一样。它们被编译到模块2中,因此即使您只更改了模块1中的常量,模块2的字节码也可以更改。 –

+0

@JFMeier您是对的。如果我需要也建立模块2。但拉特的说,我肯定有没有像这样被改变,可以打破模块2,有没有办法我可以跳过模块2的构建 – user3198603

回答

0

您可以使用配置文件来构建你知道发生了什么变化,因为时间戳不POM中支持

在这里看到更多的细节:Maven Modules optional in pom.xml

+0

其实这并不能解决我的目的,因为我想尽量减少构建时间。根据哪个模块被修改,我只想建立具体的那些。从你粘贴的链接,我必须使maven配置文件包含每次修改模块。这意味着首先我需要首先弄清哪些模块被修改,然后包含那些本身容易出错和耗时的模块。 – user3198603

+0

我知道,但实际上你不会有太多的选择。很抱歉,无法为您提供更多帮助 – DamCx