簡體   English   中英

當maven 3.2.5在travis-ci.org上與3.1.1一起運行時,為什么會檢測到maven 3.2.5?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM