Java异常 #IntelliJ IDEA改了项目的Target bytecode version
1.问题现象用 Intellij IDEA 新建 Java 项目,使用 JDK1.8,设置Target bytecode version 为 1.8,Language level为 1.8。但是,每新加一个模块,刚才设置的 Target bytecode version 又全部都变成了1.5。再次把 Java Compiler的 Target bytecode version 或者把 Projec
1.问题现象
用 Intellij IDEA 新建 Java 项目,使用 JDK1.8,设置 Target bytecode version 为 1.8,Language level 为 1.8。但是,每新加一个模块,刚才设置的 Target bytecode version 又全部都变成了 1.5。
再次把 Java Compiler 的 Target bytecode version 或者把 Project Settrings 的 Target bytecode version 设置成 1.8。过了一会儿又会提示 1.5。
2.排查分析
Maven 是个项目管理工具,如果我们不告诉它我们的代码要使用什么样的 jdk 版本编译的话,它就会用 maven-compiler-plugin 默认的 jdk 版本来进行处理,这样就容易出现版本不匹配的问题。例如代码中要是使用上了 jdk1.8 的新特性,但是 maven 在编译的时候使用的是 jdk1.6 的版本,那这一段代码是完全不可能编译成 .class 文件。
为什么会这样呢?
编译器插件用于编译项目的源代码。从 3.0 开始,默认编译器是 javax.tools.JavaCompiler(如果使用的是Java 1.6),并且用于编译 Java 源代码。如果你想强制插件使用 javac,你必须配置插件选项 forceJavacCompilerUse。
还要注意,目前默认的源代码设置是 1.5,默认的目标设置是 1.5,与运行 Maven 的 JDK 无关。如果要更改这些默认值,则应按照设置 Java 编译器的 -source 和 -target 中所述设置源和目标。
3.解决方案
3.1. 项目最外层的 pom.xml 配置文件中添加以下配置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<!-- 一般而言,target与source是保持一致的,但是,有时候为了让程序能在其他版本的jdk中运行(对于低版本目标jdk,源代码中需要没有使用低版本jdk中不支持的语法),会存在target不同于source的情况 -->
<!-- 源代码使用的开发版本 -->
<source>1.8</source>
<!-- 需要生成的目标class文件的编译版本 -->
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
3.2. 或者检查一下 maven 安装目录下的 \maven\conf\settings.xml 文件,看看 maven.compiler.source 设置的是哪个版本,然后改成自己使用的版本
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.7</jdk>
</activation>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
</properties>
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)