2016-11-25 3 views
1

У меня есть проект document-scanner-aggregator, который работает нормально локально при запуске с Maven 3.1.1, то есть ~/apache-maven-3.1.1/bin/mvn clean install, но не on travis-ci.org, где он обнаруживает Maven 3.2.5, который подозрительно является версией, предоставленной travis-ci.org. Однако он не должен этого делать, потому что предполагается, что версия Maven, которая запускает сборку, будет принудительно соблюдена, верно?Почему maven-enforcer-plugin обнаруживает maven 3.2.5, когда он запускается с 3.1.1 на travis-ci.org?

Неудача

[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 

ответ

2

Вы непонимание роли Enforcer Plugin:

Плагин Enforcer обеспечивает цели, чтобы контролировать определенные экологические ограничения, такие как версии Maven, JDK версии и ОС семейства наряду со многими другими стандартными правилами и пользовательскими правилами.

Его цель состоит не в том, чтобы сделать магию так, чтобы сконфигурированные правила были проверены, а в том, чтобы не выполнить сборку, когда одно из правил не проверено. Иными словами, он проверяет список настроенных правил, поэтому сборка не может продолжаться, если один из них не проверен. Причина в том, что если одна из предпосылок для сборки не выполняется, лучше как можно раньше провалиться.

В вашем случае правило requireMavenVersion предусматривает, что сборка выполнена с версией Maven, строго ниже 3.2. Он не будет порождать новый экземпляр Maven, если вы используете сборку с Maven 3.2.5, чтобы это правило было проверено; какую версию он должен использовать, и где он ее получит? Вместо этого он обнаруживает, что сборка выполнена с версией Maven, которая запрещена, и соответственно не выполняется. Поскольку сборщик Travis is configured to use Maven 3.2.5, он, как ожидается, потерпит неудачу, и вам необходимо установить версию Maven ниже 3.2 для вашей сборки Travis.

Чтобы использовать другую версию Maven, как 3.1.1, на Travis CI, вы можете иметь следующее в .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)means, что соответствует версии, строго ниже 3.2. Поэтому, требуя, чтобы он также был строго ниже 3,3, является избыточным (поскольку 3.2 до 3.3).

+0

Удивительный! '.travis.yml' делает это. Я рекомендую отредактировать ответ, чтобы быстрее добираться до важной информации, так как у меня есть чувство, что я не буду последним, что затушевывает это. –

 Смежные вопросы

  • Нет связанных вопросов^_^