无法使用Maven编译简单的Java 10/Java 11项目
我有一个简单的Maven项目:无法使用Maven编译简单的Java 10/Java 11项目,java,maven,java-10,java-11,module-info,Java,Maven,Java 10,Java 11,Module Info,我有一个简单的Maven项目: src └── main └── java └── module-info.java pom.xml pom.xml: <groupId>org.example</groupId> <artifactId>example</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</pack
src
└── main
└── java
└── module-info.java
pom.xml
pom.xml:
<groupId>org.example</groupId>
<artifactId>example</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>example</name>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<release>10</release>
</configuration>
</plugin>
</plugins>
</build>
有办法解决这个问题吗?更新
答案现在已经过时了。请参阅。
maven编译器插件
依赖于旧版本的ASM,它还不支持Java 10(和Java 11)。但是,可以明确指定ASM的正确版本:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<release>10</release>
</configuration>
<dependencies>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>6.2</version> <!-- Use newer version of ASM -->
</dependency>
</dependencies>
</plugin>
org.apache.maven.plugins
自2018年7月30日起,为了解决上述问题,可以将maven中使用的java版本配置为JDK/11之前的任何版本,并利用指定9、10、11的版本,而无任何显式依赖项
org.apache.maven.plugins
编辑[30.12.2018]
事实上,在针对JDK/12编译代码时,您也可以使用相同版本的maven编译器插件
更多详细信息和一个示例配置说明如何操作。将maven编译器插件
升级到3.8.0
似乎是必要的,但还不够。如果仍然存在问题,那么如果从命令行运行,还应该确保将JAVA_HOME
环境变量设置为JAVA 10(或11)。(您收到的错误消息不会告诉您这一点。)或者,如果您是从IDE运行,则需要确保将其设置为使用当前JDK运行maven。指定maven.compiler.source和target版本
1) Maven版本,支持您使用的jdk。在我的例子中,JDK 11和maven 3.6.0
2) pom.xml
我制作了一些快速入门项目,我在我的其他项目中重复使用这些项目,请随意查看:
可能不是完全相同的错误,但我有一个类似的错误
检查Maven Java版本
由于Maven也使用Java运行,请首先检查Maven运行的版本:
mvn --version | grep -i java
它返回:
Java版本1.8.0_151,供应商:Oracle
公司,运行时:C:\tools\jdk\openjdk1.8
不兼容版本
上图中,我的maven运行的是JavaVersion1.8.0\u151
。
因此,即使我指定maven使用Java11
进行编译:
<properties>
<java.version>11</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
</properties>
屈服
Java版本:11.0.2,供应商:Oracle公司,运行时:C:\tools\jdk\openjdk11
编译使用Java 11规范编写的代码时,哪种方法更好、更正确。好吧,所以对我来说没有任何效果。
我在使用SpringBoot和hibernate。spring启动版本是~2.0.1,我会在编译时继续得到这个错误和空指针异常。问题在于hibernate需要版本升级。但在那之后,我遇到了一些其他问题,似乎注释处理器没有被识别,所以我决定将spring从2.0.1版本升级到2.1.7版本,一切都按预期进行
您仍然需要添加上述插件
希望有帮助 如果您使用的是spring boot,那么在pom.xml中添加这些标记
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
org.springframework.boot
springbootmaven插件
及
UTF-8
UTF-8
``10
您也可以在
标记中将java版本更改为11或13
只需在pom.xml中添加以下标记
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.release>11</maven.compiler.release>
</properties>
UTF-8
UTF-8
11
您可以将11更改为10,也可以将13更改为java版本。我正在使用最新的Java13。它对我很有用。在我的例子中,我必须在脚本中显式地将JAVA_HOME设置为JDK-11,尽管终端显示的是JAVA 11版本
这是因为,我正在通过shell脚本执行mvn
,而mvn
使用的是我机器的默认JDK,即JDK8
我在脚本中确认了mvn
正在使用哪个JDK版本,并设置为JDK-11,如下所示:
#!/bin/bash
echo $(java -version)
echo $(mvn --version | grep -i java )
export JAVA_HOME="/opt/jdk11/"
export PATH=$JAVA_HOME/bin:$PATH
echo $(java -version)
echo $(mvn --version | grep -i java )
@MikhailKholodkov这个错误已经解决了,现在可以解决了。这只有在使用Java11执行maven时才能立即解决。如果您的平台Java版本是例如Java 8(因此maven是用Java 8执行的),您需要定义一个工具链,注意关联的属性是maven.compiler.release
:11
@OlivierGrégoire-那么,我们可以用您给出的代码替换此代码吗?1.8 1.8@MasterJoe2是的,考虑到您正在升级到Java-11,您应该能够做到这一点。需要明确的是:您必须使用等于或高于发布目标版本和源目标版本的Java版本运行maven。这对我来说很有效,在使用maven assembly plugin版本3.2.0时也是如此
mvn --version | grep -i java
<properties>
<java.version>11</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
</properties>
mvn --version | grep -i java
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
`<maven.compiler.release>`10</maven.compiler.release>
</properties>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.release>11</maven.compiler.release>
</properties>
#!/bin/bash
echo $(java -version)
echo $(mvn --version | grep -i java )
export JAVA_HOME="/opt/jdk11/"
export PATH=$JAVA_HOME/bin:$PATH
echo $(java -version)
echo $(mvn --version | grep -i java )