Maven依赖版本取决于JVM版本

乔希

我正在尝试创建一个Maven POM,在构建项目和运行测试时,它将引入正确版本的alpn-boot

如果我在运行构建时(例如,通过mvn -Dalpn-boot.version=8.1.8.v20160420 test或作为环境变量)从“外部”注入属性,而在尝试使用POM将其插值到内部时,则一切正常${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
乔希

我最终遵循@khmarbaise的建议,为每个需要支持的JDK版本添加了一个Maven配置文件

<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>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Maven依赖版本取决于JVM版本

来自分类Dev

依赖项取决于项目中已经使用的旧版本库

来自分类Dev

依赖项取决于项目中已使用的库的旧版本

来自分类Dev

包含指令取决于Qt版本

来自分类Dev

Common Lisp:asdf取决于特定版本

来自分类Dev

最新的Koala取决于哪个ZendFramework版本?

来自分类Dev

行为取决于SQL Server版本

来自分类Dev

Android Manifest属性取决于SDK版本

来自分类Dev

行为取决于SQL Server版本

来自分类Dev

最新的Koala取决于哪个ZendFramework版本?

来自分类Dev

分段故障。取决于ubuntu版本

来自分类Dev

Maven项目取决于同一工件的两个版本

来自分类Dev

Maven解析版本的依赖项

来自分类Dev

所需的Maven依赖Java版本?

来自分类Dev

在Maven中测试依赖版本

来自分类Dev

Maven依赖版本作为属性

来自分类Dev

Maven多模块依赖版本

来自分类Dev

与旧版本的Maven依赖

来自分类Dev

Maven依赖冲突-更高版本

来自分类Dev

没有版本的Maven依赖

来自分类Dev

Maven依赖冲突-更高版本

来自分类Dev

Maven多模块依赖版本

来自分类Dev

与旧版本的Maven依赖

来自分类Dev

_MSC_VER是否取决于工具箱版本?

来自分类Dev

android webview版本是否取决于sdk或设备?

来自分类Dev

hello world崩溃的调试版本,取决于优化级别

来自分类Dev

dynamic_cast失败-取决于操作系统版本

来自分类Dev

C ++“错误:“缺少参照...的对象”取决于gcc版本

来自分类Dev

如何处理推送通知(取决于iOS版本)?