当前位置:  开发笔记 > 编程语言 > 正文

在Maven构建期间跳过子模块

如何解决《在Maven构建期间跳过子模块》经验,为你挑选了3个好方法。

我们需要能够在某些环境中跳过子模块.

有问题的模块包含集成测试,需要半小时才能运行.因此我们希望在构建CI服务器时包含它,但是当开发人员在本地构建(并且测试运行)时,我们希望跳过该模块.

有没有办法在配置文件设置中执行此操作?我已经做了一些谷歌搜索,并在这里查看其他问题/答案,并没有找到一个很好的解决方案.

我想一个选项是pom.xml完全从父项中删除该子模块,只需在我们的CI服务器上添加另一个项目来构建该模块.

建议?



1> Alexandre Du..:

Maven版本3.2.1添加了这个功能,你可以使用-pl开关(快捷键为--projects列表)与!排除某些子模块.

mvn -pl '!submodule-to-exclude' install
mvn -pl -submodule-to-exclude install

小心打击角色!是一个特殊的字符,所以你要么必须单引号(就像我做的那样)或者用反斜杠字符来转义它.

排除多个模块的语法与包含相同

mvn -pl '!submodule1,!submodule2' install
mvn -pl -submodule1,-submodule2 install

编辑 Windows似乎不喜欢单引号,但它在bash中是必要的; 在Windows中,使用双引号(感谢@awilkinson)

mvn -pl "!submodule1,!submodule2" install


重要提示:如果要排除嵌套子模块,则需要使用限定版本`mvn -pl!com.acme:nestedmodule1`
-pl选项在artifactId之前需要'[groupId]:',因此我们应该使用mvn -pl'!:submodule-to-exclude'安装
您也可以使用`mvn -pl'!path / to / submodule / directory'`,而无需使用groupId和artifactId。如果`submodule1`和`submodule2`位于当前目录中,我的答案有效。

2> Raghuram..:

当然,这可以使用配置文件完成.您可以在父pom.xml中执行以下操作.

  ...
   
      module1
      module2  
      ...
  
  ...
  
     
       ci
          
            module1
            module2
            ...
            module-integration-test
           
      
  
 ...

在您的CI中,您将使用ci配置文件运行maven ,即mvn -P ci clean install


有没有办法做到这一点,而不重复所有共享的东西?
请注意,如果您使用maven-release-plugin,它似乎不会更新隐藏在配置文件开关后面的子模块的版本号.您可以将具有不同版本号的子模块添加到项目的其余部分......
不幸的是,在配置文件中,您不能排除先前在pom的主部分中提到的模块.JIRA https://issues.apache.org/jira/browse/MNG-5230(以及整个pom结构)可以通过更加仔细的思考完全实现.
很好的答案!我不知道为什么我从Maven文档中找到这个有很多麻烦.我要提出的一个建议是,因为我更喜欢默认运行集成测试,我将`activeByDefault`添加到该配置文件,然后必须添加另一个空配置文件(例如`skip-integration-tests`)才能够跳过它们.
哦!非常好.比我的建议简单.
这个解决方案真的有效吗?至少我无法使其正常工作。好像我有@EdRandall这样的问题

3> skuro..:

可以通过指定-pl命令行参数来决定要构建哪些reactor项目:

$ mvn --help
[...]
 -pl,--projects                    Build specified reactor projects
                                        instead of all projects
[...]

它以下列形式之一接受以逗号分隔的参数列表:

包含POM的文件夹的相对路径

[groupId]:artifactId

因此,给出以下结构:

project-root [com.mycorp:parent]
  |
  + --- server [com.mycorp:server]
  |       |
  |       + --- orm [com.mycorp.server:orm]
  |
  + --- client [com.mycorp:client]

您可以指定以下命令行:

mvn -pl .,server,:client,com.mycorp.server:orm clean install

建立一切.删除列表中的元素以仅构建您喜欢的模块.


编辑:正如blackbuild指出的那样,从Maven 3.2.1开始,你有一个新的-el标志,从反应堆中排除项目,类似于 -pl:

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有