【发布时间】:2016-09-18 16:51:43
【问题描述】:
我正在尝试创建一个 Maven POM,它会在构建项目和运行测试时引入 the correct version of alpn-boot。
如果我在运行构建时从“外部”注入属性(例如,通过mvn -Dalpn-boot.version=8.1.8.v20160420 test 或作为环境变量),但在尝试使用${java.version} 将其插入到 POM 内时,则整个事情都有效。
我已尝试使用properties-maven-plugin 来完成此操作,并在pom.xml 文件 (sn-p) 中使用以下设置:
<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
【问题讨论】:
-
从字面上将版本写入 pom 有什么大问题?
-
@khmarbaise 问题是如果使用了“错误”版本的 JVM,构建/测试会挂起并失败。不幸的是,我在我的开发机器上运行另一个版本的 JVM,而不是 Travis CI,所以如果我在里面硬编码“alpn-boot”的版本,我可以选择我的构建失败或基于 Travis CI 的构建失败POM。
-
这听起来像是 maven 工具链的工作……除此之外,如果您的构建使用不同的 JVM? (7/8?)比你应该检查你的代码..此外,jvm的任何东西都可以通过环境获得。并使用基于 JVM/JDK 的不同依赖项使用您需要的声音 a profile which is activated by JDK version..
-
@khmarbaise “我的”代码很好,只是
alpn-boot通过修补 Java 运行时的某些类来工作,因此取决于 JVM 的版本。感谢 Maven 配置文件的提示。它比我希望的要冗长一些(鉴于 Java 8 的不同版本有 8 个不同版本的“alpn-boot”),但它看起来是可行的。
标签: java maven jetty pom.xml alpn