![](/img/trans.png)
[英]maven-enforcer-plugin issue while creating org.jenkins-ci.plugins in eclipse
[英]Why does maven-enforcer-plugin detect maven 3.2.5 when it's run with 3.1.1 on travis-ci.org?
我有一个项目文档扫描器聚合器 ,在使用Maven 3.1.1运行时可以在本地正常运行,即~/apache-maven-3.1.1/bin/mvn clean install
,但不在travis-ci.org上检测到Maven 3.2.5,它可疑是travis-ci.org提供的版本。 但是,不应该这样做,因为应该运行运行该构建的Maven版本,对吗?
失败是
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireMavenVersion failed with message:
Detected Maven Version: 3.2.5 is not in the allowed range (,3.2).
...
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:1.4:enforce (enforce-versions) on project javaocr-parent: Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed. -> [Help 1]
并且配置是
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<id>enforce-versions</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireMavenVersion>
<!--different rules for different issues-->
<!--3.3.x causes `java.lang.NoClassDefFoundError: org/eclipse/aether/spi/connector/Transfer$State` which is caused by certain maven versions, see https://cwiki.apache.org/confluence/display/MAVEN/AetherClassNotFound for details-->
<version>(,3.3)</version>
<!--3.2.x causes `No implementation for org.eclipse.aether.connector.wagon.WagonConfigurator was bound.`-->
<version>(,3.2)</version>
</requireMavenVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
在javaocr中 。
.travis.yml
是
language: java
install:
- wget http://mirrors.ae-online.de/apache/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.tar.gz && tar xf apache-maven-3.1.1-bin.tar.gz
- apache-maven-3.1.1/bin/mvn clean install
您误解了Enforcer插件的作用:
Enforcer插件提供了控制某些环境约束的目标,例如Maven版本,JDK版本和OS系列以及更多标准规则和用户创建的规则。
它的目标不是做魔术,以便验证已配置的规则,而是在未验证其中一个规则时使构建失败。 换句话说,它会检查已配置规则的列表,因此,如果其中一个未经验证,构建将无法继续。 原因是,如果未满足构建的先决条件之一,则最好尽早失败。
在您的情况下, requireMavenVersion
规则会强制使用严格低于3.2的Maven版本来完成构建。 如果您使用Maven 3.2.5运行构建,它将不会产生一个新的Maven实例,以便验证该规则。 它应该使用哪个版本,它将在哪里得到? 而是,它检测到构建是使用不允许的Maven版本完成的,因此失败。 由于Travis构建配置为使用Maven 3.2.5 ,因此预期会失败,因此您需要为Travis构建安装低于3.2的Maven版本。
要在Travis CI上使用其他Maven版本(如3.1.1),可以在.travis.yml
包含以下.travis.yml
:
before_install:
- wget http://mirrors.ae-online.de/apache/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.tar.gz
- tar xf apache-maven-3.1.1-bin.tar.gz
- export M2_HOME=$PWD/apache-maven-3.1.1
- export PATH=$M2_HOME/bin:$PATH
install: /bin/true
script: mvn clean install
附带说明一下,您当前的配置
<requireMavenVersion>
<version>(,3.3)</version>
<version>(,3.2)</version>
</requireMavenVersion>
完全等同于
<requireMavenVersion>
<version>(,3.2)</version>
</requireMavenVersion>
范围(,3.2)
表示它与严格低于3.2的版本匹配。 因此,要求它也严格低于3.3是多余的(因为3.2在3.3之前)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.