前言
在放假前,被安排对比SVN上与生产环境上的代码是否相同。为了对比的一致性,我在用maven打包SVN代码时需要将Java编译版本从8降低到6。直观一点的描述就是在生成的jar包中,将META-INF下MANIFEST.MF中的Build-Jdk修改成1.6版本,如下图所示:
JDK 1.8
JDK 1.6
一个看似很简单的问题我还是捣鼓了半天,现将其中修改方法和遇到的问题汇总如下:
通过配置文件来修改JDK版本
在网上搜索解决方法时,普遍是使用这类方法,主要有两种:
- 往maven目录下conf/settings.xml文件添加如下代码,这种方法适用全局。
<profiles>
<profile>
<id>jdk-1.6</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.6</jdk>
</activation>
<properties>
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
<maven.compiler.compilerVersion>1.6</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
- 针对项目修改其中的pom.xml文件,然后用maven命令行执行(mvn clean, mvn package),即可获得指定jdk版本编译的jar包,这种方式只适用于单一项目。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
然而通过修改配置这类方法并没有达到我的目的,生成的jar还是显示由JDK1.8生成不知为何…
通过Eclipse设置来修改
接着想到能不能通过修改Eclipse的编译环境来达到这个目的,即找到Window -> Preferences -> Java -> Compiler设置,将Compiler compliance level修改成1.6。再找到Window -> Preferences -> Java -> Installed JREs设置,将下载JDK1.6添加到Installed JREs中并勾选。
设置完成后,使用maven对项目进行打包,出现java.lang.UnsupportedClassVersionError错误。由于我使用的maven版本是3.3.3,而在官网上发现此版本最低需要JDK1.7,所以版本不一致时会报错。
从图中可以看出,支持Java 6的最新版本是3.2.5,所以我将Eclipse中maven版本修改为3.2.5后再次使用maven对项目进行编译,这个时候又出现如下错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile (default-testCompile) on project springside-core: Compilation failure
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
[ERROR] -> [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/MojoFailureException
再次去查资料,发现应该将Eclipse中JRE的路径修改成JDK的安装路径,而不是单独的JRE路径。通过修改路径之后,maven终于可以使用Java 6对项目进行编译和打包了。