Maven 3.8.0编译器 - 致命错误编译:不支持发布版本11。

55

我无法使用最新版本的maven-compiler-plugin和Java 11来构建。

pom.xml:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <release>11</release>
            </configuration>
        </plugin>
    <plugins>
<build>

当我尝试使用Maven构建时:

➜  mvn clean compile
[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] Building service 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ service ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 80 source files to /home/mip/service/target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.859 s
[INFO] Finished at: 2018-08-01T11:20:55+01:00
[INFO] Final Memory: 32M/124M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project service: Fatal error compiling: release version 11 not supported -> [Help 1]
[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/MojoExecutionException

这是我正在使用的Maven和Java版本:

  mvn -version
Apache Maven 3.5.2
Maven home: /usr/share/maven
Java version: 10.0.1, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: en_GB, platform encoding: UTF-8
OS name: "linux", version: "4.15.0-29-generic", arch: "amd64", family:     "unix"
  /usr/lib/jvm/java-11-openjdk-amd64/bin/java -version
openjdk version "10.0.1" 2018-04-17
OpenJDK Runtime Environment (build 10.0.1+10-Ubuntu-3ubuntu1)
OpenJDK 64-Bit Server VM (build 10.0.1+10-Ubuntu-3ubuntu1, mixed mode)

Java 11自称为“10.0.1”是否可能导致问题? 如果我修改我的pom.xml为 <release>10</release> ,则可以顺利构建,尽管我没有安装Java 10。

➜  ~ /usr/lib/jvm/java-11-openjdk-amd64/bin/javac -version
javac 10.0.1 

➜ javac --release 11 SomeClass.java
javac: release version 11 not 
supported Usage: javac <options> <source files>
use --help for a list of possible options

我认为这是Ubuntu的openjdk-11-jdk软件包存在的问题:

➜  ~ sudo apt install openjdk-11-jdk
Reading package lists... Done
Building dependency tree       
Reading state information... Done
openjdk-11-jdk is already the newest version (10.0.1+10-3ubuntu1).
0 to upgrade, 0 to newly install, 0 to remove and 2 not to upgrade.

@mip - 奇怪的是,路径看起来像是Java 11,但如果你注意到maven使用的版本是Java10。我非常确定,你的配置不正确。另外,更新一下你的maven版本到3.5.4怎么样? - Naman
1
请参见 https://askubuntu.com/a/1037655。 - muttonUp
https://bugs.launchpad.net/ubuntu/+source/openjdk-lts/+bug/1796027 - mip
4
请确保你正在使用带有javac的JDK,而不是来自openJDK项目的JRE(例如在RedHat上被称为_java-11-openjdk-11.0.1.13-3.el7_6.x86_64_)。 - Siggen
这很可能是因为当时的Ubuntu准备支持Java 11,但只有Java 10可用。这很可能是因为关于Java 8未及时进行回溯的争议很大。 - undefined
11个回答

56

运行mvn需要设置JAVA_HOME。我遇到了同样的问题,将JAVA_HOME设置为正确的JDK版本即可解决问题。


4
对于Linux用户,请使用命令export JAVA_HOME=<path-to-java>。来源为https://dev59.com/L2Yr5IYBdhLWcg3wVY7K#13752604。 - sonrad10
为了完整起见,对于使用Windows的人,可以在Powershell中使用$env:JAVA_HOME=<path-to-java>,或者在cmd中使用set JAVA_HOME=<path-to-java> - LadyCailin
除了AvahW提到的内容,你还可以参考这篇帖子https://askubuntu.com/a/175547,了解如何设置Java版本。 - penguin

8
我在 Docker 容器中构建 Java 项目时遇到了这个错误。很可能是因为 Maven 的安装方式不对,因为当我将容器基于官方 Maven 镜像official maven image时,错误消失了。
具体来说,在我的 Dockerfile 文件中使用以下内容:
FROM maven:3.6.3-jdk-11-slim

经过进一步调查,关键区别在于我安装了包java-11-openjdk,但我需要安装的是java-11-openjdk-devel

5

对于我来说,这是因为我安装了Java 11 JRE而不是JDK。 文件夹名称中有“jdk”,所以我认为它是正确的,但是查看/bin文件夹时,我没有看到javac可执行文件,所以我想它回退到系统上早于Java 11的默认Java。


同样的问题,“javac”命令无法运行,所以我意识到是JRE的问题,而不是JDK。 - undefined

5

我在 CentOS 7 遇到了类似的问题。

Fatal error compiling: error: release version 11 not supported

我有jre却没有jdk。你可以通过运行javac命令来找出这个问题。如果显示“command not found”,那么需要安装jdk。

安装Java 11 JDK:

sudo yum install java-11-openjdk-devel

安装Java 11 JRE

sudo yum install java-11-openjdk

更多细节请参考此处链接,我认为这很有用。

https://phoenixnap.com/kb/install-java-on-centos


4

我看到您正在使用Java 9,需要使用Java 11进行构建,请尝试以下步骤:

  1. 确保JAVA_HOME设置为C:\Program Files\Java\jdk-11......

  2. 在您的pom.xml文件中添加 "<properties> <java.version>11</java.version> </properties>",并在适当的位置引用 ${java.version}。

  3. "mvn -v" 命令应该会输出类似如下内容(取决于maven和Java安装在计算机中的位置): Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-04T21:00:29+02:00) Maven home: C:\Program Files (x86)\Apache-Maven-3.6.1\bin.. Java version: 11.0.6, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk-11.0.6 Default locale: en_US, platform encoding: Cp1252 OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

  4. 然后再次运行 mvn clean install。

  5. 如果还没有成功,请分享您的pom.xml文件,以便我们可以查看可能导致构建失败的配置。


0
根据信息显示,这是一个版本问题。我在启动一个Spring项目时选择了Java 11,而实际上我电脑上安装的是Java 8。我只需回到适合的Java版本重新创建项目,错误就消失了。

0
如果您在Eclipse中遇到此错误,请尝试在下载并设置最新的Maven版本(包括将MAVEN_HOME环境变量设置为安装路径)后,在Eclipse之外编译项目。
如果您的项目在Eclipse之外编译但在其中无法编译,则请检查Maven配置使用的jdk:
  • 在Eclipse中:运行|运行配置...
  • 选择您的Maven Build配置
  • 选择JRE选项卡,并确保使用正确的JRE。
  • 对于其他Maven配置重复此操作

0

0
在终端中输入:
mvn -version
示例 - Java 版本:9.0.4
进一步使用的插件:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<release>9.0.4</release>
</configuration>
</plugin>
</plugins>

0

对我来说,一个看似相似的错误,具体地说是 java.lang.AssertionError

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project nospringboot: Fatal error compiling: java.lang.AssertionError: Version '14' not supported -> [Help 1] 

这是由于其中一个依赖项引起的。我已经进行了替换。

<groupId>org.testifyproject.mock</groupId>
<artifactId>mockito</artifactId>
<version>1.0.6</version>

使用

<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.9.5</version>

现在它正在工作。当我在详细模式下运行maven构建时,我意识到了这一点,并打印出了以下输出:

Caused by: java.lang.AssertionError: Version '14' not supported
    at org.testifyproject.processor.DiscoverableProcessor.getSupportedSourceVersion(DiscoverableProcessor.java:67)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$ProcessorState.checkSourceVersionCompatibility(JavacProcessingEnvironment.java:764)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$ProcessorState.<init>(JavacProcessingEnvironment.java:704)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors$ProcessorStateIterator.next(JavacProcessingEnvironment.java:830)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:926)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1270)
...

该方法(在哪个具体包中: org.testifyproject.processor.DiscoverableProcessor.getSupportedSourceVersion(DiscoverableProcessor.java:67)产生了负面断言。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接