场景:
SSM框架,本机使用JDK1.8 。。使用maven创建项目A,在eclipse跑着没有问题,然后使用eclipse又重新导入一个新的项目B,之后项目B报错,第一个错误
Description Resource Path Location Type Java compiler level does not match......
网上有很多说这种错误的,百度一下就是更改三个步骤,就是要将项目与本机配置的jdk版本保持一致
1.右键项目,选择Properties---->Project facets,把Java版本改成本机JDK版本。
2.选择Windows->Preferences->java->Compiler,然后把JDK版本改成本机JDK版本。
3.右键项目,选择Properties-->Java build path-->libraries,将已经安装好的JDK环境remove,然后在重新加入
但是使用上述方法!!!!!依然不管用!!!!!
此时心情很是复杂,赶紧使用eclipse打开自己的原项目A,!!!!!!此时A项目也报同样的错误,,,想死的心都有了,万一不行就得重新建立,那可是敲了很久的代码!!!
遇到事情不要慌,办法总比困难多!
查找原因
打开项目A的本项目的.setting下org.eclipse.jdt.core.prefs文件,发现其中的jdk变为1.5
如图
黑人问号!!!!我本机可是1.8的JDK,怎么会变成1.5,难道是maven建项目时默认JDK为1.5???
先不管了,把上面文件中的JDK1.5变为1.8,刷新项目后,没有报错Description Resource Path Location Type Java compiler level does not match......
但是报出一堆项目代码中的JDK不同,导致的错误,很是明显!
由此可见,项目中的JDK环境还是没有统一!!!
解决方案
方案来源:https://www.cnblogs.com/yulinlewis/p/9575826.html
有两种解决方法,一种是针对某个Maven项目而言,直接在pom文件中指明jdk版本;一种是全局设置,为所有Maven项目指明jdk版本。
在pom文件中指明jdk版本
在项目的pom.xml中的build节点里使用maven的编译插件来指定jdk版本,项目中通常使用这种方法来指定,因为比较灵活,可以随意指定版本,修改保存后即可生效。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<encoding>UTF-8</encoding>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
修改settings.xml文件
找到Maven的安装路径,打开conf\settings.xml
,找到profiles
节点,在该节点下添加一个profile
节点:
<profile>
<id>jdk-1.8</id>
<activation>
<jdk>1.8</jdk>
<activeByDefault>true</activeByDefault>
</activation>
<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>
使用这种方法的好处是所有Maven项目都会按照这里的jdk版本来编译,当然如果在pom文件里也指定了jdk版本,则以pom里的为准。这种全局修改的方法必须要重启Eclipse才有效果。
个人建议就算是修改了全局配置,也要在每个Maven项目里指明jdk版本,这是种良好的规范,利于别人理解。