【问题标题】:Maven enforcer plugin crashing because of version string in open JDK由于开放 JDK 中的版本字符串,Maven 执行器插件崩溃
【发布时间】:2020-05-02 13:09:10
【问题描述】:

我下载了 open jdk 并且在 maven 构建方面遇到了一些问题,特别是 maven-enforcer-plugin。使用插件版本 1.4.1。

Enforcer 插件正在尝试强制执行 JDK 版本,例如

<requireJavaVersion>
    <version>[13,)</version>
    <message>[ERROR] OLD JDK [${java.version}] in use. Need JDK 13.0 or newer</message>
</requireJavaVersion>

Enforcer 插件因以下错误而崩溃

Caused by: java.lang.StringIndexOutOfBoundsException: begin 0, end 3, length 2
    at java.lang.String.checkBoundsBeginEnd (String.java:3319)
    at java.lang.String.substring (String.java:1874)
    at org.apache.commons.lang.SystemUtils.getJavaVersionAsFloat (SystemUtils.java:1122)
    at org.apache.commons.lang.SystemUtils.<clinit> (SystemUtils.java:818)
    at org.apache.maven.plugins.enforcer.RequireJavaVersion.execute (RequireJavaVersion.java:52)
    at org.apache.maven.plugins.enforcer.EnforceMojo.execute (EnforceMojo.java:193)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)

花了很多时间,我终于弄清楚JDK报告的版本没有小数点。这导致插件失败。

java -version
   openjdk version "13" 2019-09-17
   OpenJDK Runtime Environment (build 13+33)
   OpenJDK 64-Bit Server VM (build 13+33, mixed mode, sharing)

在这种情况下,解决方法是什么?

【问题讨论】:

标签: java maven maven-plugin


【解决方案1】:

基于recent sources,它仍然使用commons-lang 来检测Java 版本。此实现存在一些问题并且不向前兼容。我创建了MENFORCER-347,这应该很容易解决。我已将其标记为可供抢购,因此它会显示在https://s.apache.org/up-for-grabs_maven 的列表中,希望有人能接受它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 2014-08-01
    • 1970-01-01
    相关资源
    最近更新 更多