Maven命令的运行需要依赖JDK;
Maven的编译更是离不开jdk;
能否编译成功、编译的结果都和JDK版本息息相关。
场景说明:
我现在系统里面 安装了JDK版本1.6、版本1.7、版本1.8和maven 版本3.1.0。
默认的JDK版本是1.7。
问题点:
1、 系统中maven依赖的是哪个JDK版本?
2、 系统中maven 编译项目的时候使用的是哪个JDK版本?
3、 如果现在系统默认的JDK版本是1.7
a) 现在我有一个特殊项目需要使用JDK版本1.6才能正常编译,需要如何设置。
b) 如果JDK版本1.6系统中没有安装,maven编译的时候会自动去中央仓库下载依赖吗?或者 查看没有版本1.6会使用默认的JDK版本1.7?或者编译失败?
4、 如果默认的jdk版本是1.7,全局指定了maven编译的jdk版本是1.6,特殊项目(special-pro)maven编译指定的JDK版本是1.8。那么项目special-pro使用maven编译的时候会出现什么状况?
a) 编译失败
b) 使用默认的jdk版本1.7
c) 使用全局指定的编译jdk版本1.6
d) 使用项目中指定的编译jdk版本1.8
一 maven工程指定编译的JDK版本。
场景:工作空间内大部分项目使用JDK1.7编译,其中A项目特殊需要使用JDK1.6编译。
解决方法:
首先 ,需要在~/apache-maven-3.1.0/conf/settings.xml 文件中设置变量。
为了提高可维护性,同时方便其他项目的引用,建议系统内安装的各个版本的JDK路径存放在settings.xml文件中。
注:如果不写activeprofile ,这些变量的设置是不生效的。
其次Pom.xml文件需要如下配置:
注意:
导致编译失败的情况
a) 标签javac的路径如果是错误的、无效的会导致编译失败。
b) < source >的版本号和实际设置的JDK版本号对应不上会导致编译失败。
导致版本设置不生效的情况
1、 如果设置了< source
>和,不设置 javac的路径,设置不生效,编译则会使用系统默认的JDK,能够编译成功。
2、 想要生效,设置生效,必须设置为true。否则不生效。
3、 只有 和 同时正确设置时,才能生效。
正确设置了和,没有设置和也能使用指定版本正确编译。虽然打印的参数是默认的1.5。
二 全局指定JDK版本。
场景:开发人员小a的本地项目大部分使用JDK1.8,小a想要maven编译的时候默认就使用JDK1.8。这个可以给maven的settings.xml文件设置一个默认的JDK版本。
Settings.xml文件指定了正确的javac路径后,项目编译就会使用指定的JDK版本
三 全局的settings.xml文件里面指定了JDK版本之后,工程的pom.xml文件里面又指定另外一个JDK版本。
这个时候JDK版本优先级是:
工程pom.xml指定的版本 > 全局settings.xml文件指定的版本 >系统运行默认的JDK版本。
注意:
1、如果工程pom.xml文件里面指定的javac路径是错误的,编译失败,不会自动寻找全局的。
2、如果pom.xml只指定了没有指定,编译的时候exectable 是全局指定的JDK。
四 没有指定JDK版本
编译会使用默认的JDK版本,默认是1.5。
如果有问题,欢迎大家指出,我们共同学习。