1

Maven 3.1.1 で実行するとローカルで正常に動作するプロジェクトdocument-scanner-aggregator~/apache-maven-3.1.1/bin/mvn clean installあります。 .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
4

1 に答える 1

2

Enforcer Pluginの役割を誤解しています:

Enforcer プラグインは、Maven バージョン、JDK バージョン、OS ファミリなどの特定の環境制約を制御するための目標を、さらに多くの標準ルールやユーザー作成ルールとともに提供します。

その目標は、構成されたルールが検証されるように魔法をかけることではありませんが、ルールの 1 つが検証されない場合にビルドを失敗させることです。別の言い方をすれば、構成されたルールのリストをチェックして、それらのいずれかが検証されない場合、ビルドを続行できないようにします。その理由は、ビルドの前提条件の 1 つが満たされていない場合は、できるだけ早く失敗する方がよいからです。

あなたの場合、requireMavenVersionルールはビルドが3.2より厳密に低いバージョンのMavenで行われることを強制します。ルールが検証されるように Maven 3.2.5 でビルドを実行している場合、新しい Maven インスタンスは生成されません。どのバージョンを使用する必要があり、どこで入手できますか? 代わりに、許可されていない Maven バージョンでビルドが行われたことを検出し、それに応じて失敗します。Travis ビルドは Maven 3.2.5 を使用するように構成されているため、失敗することが予想されます。Travis ビルドには 3.2 より前の Maven バージョンをインストールする必要があります。

Travis CI で 3.1.1 などの別の Maven バージョンを使用するには、次のようにし.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 より前であるため)。

于 2016-11-25T09:47:12.803 に答える