maven是个项目管理工具,如果我们不告诉它我们的代码要使用什么样的jdk版本编译的话,它就会用maven-compiler-plugin默认的jdk版本来进行处理,这样就容易出现版本不匹配的问题,以至于可能导致编译不通过的问题。例如代码中要是使用上了jdk1.7的新特性,但是maven在编译的时候使用的是jdk1.6的版本,那这一段代码是完全不可能编译成.class文件的。为了处理这一种情况的出现,在构建maven项目的时候,第一步就是配置maven-compiler-plugin插件。
compiler插件能解决:
1:maven 2.1默认用jdk 1.3来编译,maven 3 貌似是用jdk 1.5,如果项目用的jdk 1.6也会有问题,compiler插件可以指定JDK版本为1.6。
2:windows默认使用GBK编码,java项目经常编码为utf8,也需要在compiler插件中指出,否则中文乱码可能会出现编译错误。
pom增加插件配置
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<
compilerVersion
>1.7</
compilerVersion
>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
然后mvn compile就没有以上错误了。
idea增加maven支持很简单,在module上右键--Add framework support,选上maven就可以了。还有idea中,依赖的scope如果是test的话,如果测试代码写在main/java下也会出错,确实对junit的依赖。idea的源码文件夹中直接有测试源码文件夹这种类型,测试类不能随便放。而eclipse则没有这个限制。
maven-compiler-plugin还可以更改编译jdk
<profiles>
[...]
<profile>
<id>compiler</id>
<properties>
<JAVA_1_4_HOME>C:\Program Files\Java\j2sdk1.4.2_09</JAVA_1_4_HOME>
</properties>
</profile>
</profiles>