Maven Sortpom 插件会影响项目构建的结果吗?
是否有可能仅仅因为添加了 sortpom 插件而导致项目构建失败?
通常 pom.xml 文件中元素的顺序无关紧要,因此重新排序元素不应影响构建。
但我知道这条规则有两个例外:
sortpom 插件默认不会对依赖项或插件进行排序。所以我想说 sortpom 插件不应该影响项目构建的结果。
它可能会使构建失败:
[错误] 无法执行目标 com.google.code.sortpom:maven-sortpom-plugin:2.3.0:sort (default) on project data-extractor: scm.team.company.corp: Unknown host scm.team-project .company.corp -> [帮助 1]
如果由于网络问题而找不到文件,即使使用 -o 运行也是如此
是的。
例如,您使用:
org.codehaus.mojo:build-helper-maven-plugin
reserve-network-port
阶段性目标pre-integration-test
org.apache.tomcat.maven:tomcat7-maven-plugin
的run
目标也在阶段pre-integration-test
现在,sortpom:sort
对它们进行排序,在 maven-3 中,插件的顺序很重要。因此,如果您通过 的portName
特性为 tomcat 配置一个随机端口reserve-network-port
,系统属性将不会被填充(在需要的时候),因为在排序之后,在调用目标之后执行 build- helper工件run
。
排序后的示例:
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.0</version>
<executions>
<execution>
<id>start-tomcat</id>
<phase>pre-integration-test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<fork>true</fork>
</configuration>
</execution>
<!-- ... -->
</executions>
<configuration>
<fork>true</fork>
<port>${tomcat.http.port}</port><!-- Oops, not set (yet)! -->
</configuration>
</plugin>
<!-- ... -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>${build-helper.version}</version>
<executions>
<execution>
<id>reserve-tomcat-port</id>
<phase>pre-integration-test</phase>
<goals>
<goal>reserve-network-port</goal>
</goals>
<configuration>
<portNames>
<portName>tomcat.http.port</portName><!-- Too late -->
</portNames>
</configuration>
</execution>
</executions>
</plugin>