问题
最近在IDEA导入了公司的一个工程,导入后,每次更新maven依赖后,项目就会出现一堆编译错误。如:
Diamond types are not supported at language level ‘1.5’
@Override is not allowed when implementing interface methd
这里提示泛型类型推断在1.5版本不支持,也就是说目前编译使用的JDK版本是1.5。
但是本地使用的JDK版本是1.8,idea的Java Compiler设置的也是1.8。
原因
后来找到原因是对应模块的Module Settings里的Language Level默认是5。
这里修改为8后,编译错误消失。
但每次reimport maven依赖后,编译错误又会重新出现,查看模块的Module Settings里的Language Level,又自动恢复为5了。
解决
网上搜索了一下,可以修改maven项目的pom文件,内部增加:
<project>
...
<!-- 在属性里指定编译模板版本 -->
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
...
</project>
但是对于module比较多的很复杂的项目,一个个增加properties就显得太过笨拙了。
还有一种方式是将编译版本设置在maven的settings文件中。
这样设置会对所有使用了该setting文件的module生效。
settings.xml如下:
<settings>
<localRepository>H:\mvn_repo</localRepository>
<mirrors>
<mirror>
<!--This sends everything else to /public -->
<id>nexus aliyun</id>
<mirrorOf>*</mirrorOf>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>development</id>
<!-- 这里设置后对所有项目生效 -->
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>development</activeProfile>
</activeProfiles>
</settings>
总结
IDEA开发项目涉及到几个JDK版本:
IDEA本身启动使用的JDK版本,在本地环境变量设置;
Javac编译器版本,在File->Settings->Build,Execution,Deployment->Java Compiler设置;
项目的编译器版本,在项目上右键选择Open Module Settings->Project Settings->Project->Project SDK;
模块的语言版本,在项目上右键选择Open Module Settings->Project Settings->Modules->Language level