我们有一个Maven 2项目,里面有很多模块.例:
<modules>
<module>common</module>
<module>foo</module>
<module>data</module>
<module>bar</module>
... more ...
</module>
Run Code Online (Sandbox Code Playgroud)
假设构建"数据"模块非常耗时,我们希望在CI服务器构建项目时将其排除.目前我们使用两个pom.xml文件来实现这一目标.一个包含所有模块,另一个包含所有模块,除了可以省略CI的模块.但这很烦人,因为有时我们会忘记将新模块放入两个文件中.
有没有一个解决方案不需要两个单独的模块列表?
Yog*_*h_D 131
使用Maven 3.2.1,您现在可以使用-pl !<module_name>,!<module_name>从反应堆构建中排除某些模块.
请参阅此功能请求:https://issues.apache.org/jira/browse/MNG-5230
SaM*_*SaM 72
最简单的可能是这样使用profiles:
<project>
...
<modules>
<module>common</module>
<module>foo</module>
<module>bar</module>
<modules>
...
<profiles>
<profile>
<id>expensive-modules-to-build</id>
<modules>
<module>data</module>
</modules>
</profile>
</profiles>
</project>
Run Code Online (Sandbox Code Playgroud)
然后,您应该查看激活配置文件的方法
Jör*_*ann 44
还可以在mvn命令行上指定要构建的项目.这样就不需要单独的pom,而是每次有新模块时都必须更改CI配置.
-pl,--projects <arg> Comma-delimited list of specified
reactor projects to build instead
of all projects. A project can be
specified by [groupId]:artifactId
or by its relative path.
Run Code Online (Sandbox Code Playgroud)
也许这个标志的组合和--also-make-dependents或--also-make将再次减少这种维护负担.
-am,--also-make If project list is specified, also
build projects required by the
list
-amd,--also-make-dependents If project list is specified, also
build projects that depend on
projects on the list
Run Code Online (Sandbox Code Playgroud)
art*_*tol 20
我假设您希望默认构建始终构建所有内容,无论速度如何,以便新开发人员可以快速入门,而无需了解有关POM的内容.您可以使用以下配置文件:
<modules>
<module>common</module>
<module>foo</module>
<module>bar</module>
</modules>
...
<profiles>
<profile>
<id>expensive-modules-to-build</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<modules>
<module>data</module>
</modules>
</profile>
</profiles>
</project>
Run Code Online (Sandbox Code Playgroud)
这样做的问题是,如果开发人员在命令行上指定了另一个配置文件,expensive-modules-to-build则不包括(除非开发人员也指定它).这使得记住需要包含哪些配置文件变得复杂.
这是一个hacky方式.始终包含两个配置文件,因为pom.xml文件始终存在.因此,要排除昂贵的模块,可以-P!full-build在命令行中使用.
<profiles>
<profile>
<id>full-build</id>
<activation>
<file>
<exists>pom.xml</exists>
</file>
</activation>
<modules>
<module>data</module>
</modules>
</profile>
<profile>
<id>short-build</id>
<activation>
<file>
<exists>pom.xml</exists>
</file>
</activation>
<modules>
<module>common</module>
<module>foo</module>
<module>bar</module>
</modules>
</profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)
另一个想法:Reactor模块可以嵌套,因此应该可以将快速和慢速构建模块分组到单独的poms中,然后添加另一个包含这两个模块的聚合器pom.然后,您的CI服务器只能引用包含快速构建模块的pom.
<artifactId>fast</artifactId>
<modules>
<module>fast-a</module>
<module>fast-b</module>
<module>fast-c</module>
</module>
<artifactId>all</artifactId>
<modules>
<module>fast</module>
<module>slow</module>
</module>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
82210 次 |
| 最近记录: |