2016-05-21 3 views
1

Я пытаюсь создать Maven POM, который будет тянуть the correct version of alpn-boot при построении проекта и выполнении тестов.Версия зависимости от Maven зависит от версии JVM

Все это работает, если я инъекционное свойство от момента запуска сборки «снаружи» (е. Д. С помощью mvn -Dalpn-boot.version=8.1.8.v20160420 test или переменного окружения), но не при попытке интерполировать его внутри П с помощью ${java.version}.

Я попытался с помощью properties-maven-plugin для достижения этой цели со следующими параметрами в файле pom.xml (сниппетов):

<project> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>properties-maven-plugin</artifactId> 
     <version>1.0.0</version> 
     <executions> 
      <execution> 
      <phase>initialize</phase> 
      <goals> 
       <goal>read-project-properties</goal> 
      </goals> 
      <configuration> 
       <files> 
       <file>${project.basedir}/alpn-boot/jdk-${java.version}.properties</file> 
       </files> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    <dependencies> 
    <dependency> 
     <groupId>org.mortbay.jetty.alpn</groupId> 
     <artifactId>alpn-boot</artifactId> 
     <version>${alpn-boot.version}</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 
</project> 

Содержание одного из файлов свойств:

$ cat alpn-boot/jdk-1.8.0_92.properties 
alpn-boot.version=8.1.8.v20160420 

В принципе то же самое проблема с gmaven-plugin:

<plugin> 
    <groupId>org.codehaus.groovy.maven</groupId> 
    <artifactId>gmaven-plugin</artifactId> 
    <version>1.0</version> 
    <executions> 
    <execution> 
     <phase>initialize</phase> 
     <goals> 
     <goal>execute</goal> 
     </goals> 
     <configuration> 
     <source> 
      alpnVersions = [ '1.8.0_92': '8.1.8.v20160420' ] 
      project.properties['alpn-boot.version'] = alpnVersions[System.getProperty('java.version')] 
     </source> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

С обоих подходов, которые я получаю следующее сообщение об ошибке:

[INFO] Scanning for projects... 
[ERROR] [ERROR] Some problems were encountered while processing the POMs: 
[ERROR] 'dependencies.dependency.version' for org.mortbay.jetty.alpn:alpn-boot:jar must be a valid version but is '${alpn-boot.version}'. @ org.example:my-project:[unknown-version], /path/to/pom.xml, line 132, column 22 
@ 
[ERROR] The build could not read 1 project -> [Help 1] 
[ERROR] 
[ERROR] The project org.example:my-project:1.0.0-rc3-SNAPSHOT (/path/to/pom.xml) has 1 error 
[ERROR]  'dependencies.dependency.version' for org.mortbay.jetty.alpn:alpn-boot:jar must be a valid version but is '${alpn-boot.version}'. @ org.example:my-project:[unknown-version], /path/to/pom.xml, line 132, column 22 
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 
[ERROR] Re-run Maven using the -X switch to enable full debug logging. 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles: 
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException 
+0

Что такое большая проблема написать версию в пом в буквальном смысле? – khmarbaise

+0

@khmarbaise Проблема в том, что сборка/тесты зависают и терпят неудачу, если используется «неправильная» версия JVM. К сожалению, я запускаю другую версию JVM на моей машине разработки, чем, например, Travis CI, и поэтому у меня есть выбор между неудачами или сбоями в работе Travis CI, если я жестко закодировал версию «alpn-boot» внутри POM. – joschi

+0

Это звучит как работа для maven toolchains ... и, кроме того, если вы создаете руки с другой JVM? (7/8?), Чем вы должны проверить свой код. Кроме того, что-либо из jvm доступно через среду. И используя различные зависимости, основанные на JVM/JDK, используются звуки, которые вам нужны [профиль, который активируется версией JDK] (https://maven.apache.org/guides/introduction/introduction-to-profiles.html). – khmarbaise

ответ

0

Я в конечном итоге следующие the advice of @khmarbaise и добавить Maven profile для каждой версии JDK, который нуждается в поддержке:

<properties> 
    <!-- Default alpn-boot version. See <profiles> for specific profiles. --> 
    <alpn-boot.version>8.1.3.v20150130</alpn-boot.version> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>org.mortbay.jetty.alpn</groupId> 
     <artifactId>alpn-boot</artifactId> 
     <version>${alpn-boot.version}</version> 
     <scope>test</scope> 
    </dependency> 
</dependencies> 

<!-- Profiles for selecting the correct version of alpn-boot for each JDK. 
    see http://www.eclipse.org/jetty/documentation/current/alpn-chapter.html for reference. --> 
<profiles> 
    <profile> 
     <id>jdk-1.8.0</id> 
     <activation> 
      <jdk>1.8.0</jdk> 
     </activation> 
     <properties> 
      <alpn-boot.version>8.1.0.v20141016</alpn-boot.version> 
     </properties> 
    </profile> 
    <!-- Lots of profiles [...] --> 
    <profile> 
     <id>jdk-1.8.0_92</id> 
     <activation> 
      <jdk>1.8.0_92</jdk> 
     </activation> 
     <properties> 
      <alpn-boot.version>8.1.8.v20160420</alpn-boot.version> 
     </properties> 
    </profile> 
</profiles> 
Смежные вопросы