引言: 解决在Linux系统中,运行mvn命令碰到的一个编译问题,看看如何分析并加以解决的?
1. 问题的提出
在基于maven进行相应命令操作之时,出现了如下错误信息:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
(default-compile) on project csaro: Fatal error compiling: invalid target
release: 1.8 -> [Help 1]
无法完成正常的maven操作、打包操作等。
2. 环境变量的检查
>> mvn -version
pache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /usr/share/apache-maven
Java version: 1.7.0_101, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.101-2.6.6.1.el7_2.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-327.3.1.el7.x86_64", arch: "amd64", family: "unix"
[root@flybird ~]# mvn -version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /usr/share/apache-maven
Java version: 1.8.0_91, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.91-0.b14.el7_2.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-327.3.1.el7.x86_64", arch: "amd64", family: "unix"
>> java -version
[root@xxx ~]# java -version
openjdk version "1.8.0_91"
OpenJDK Runtime Environment (build 1.8.0_91-b14)
OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)
>> echo $JAVA_HOME
为空,什么信息输出,由此可见JAVA_HOME没有设置。
>> 操作系统
CentOS 6.5
3. 问题定位与分析
从maven的错误信息来分析,其是在编译过程中无法正常执行,1.8应为JDK的版本号,基于目前的变量信息来看,其JAVA_HOME没有设置外,其余的都是正常的。基于之前的经验来分析, Java path, java classpath, java_home三个变量需要设置,classpath一般都是跟随java_HOME来走的,故大致可以确认是由于JAVA_HOME没有设置早成的。
4. 问题修复
分析Centos系统中的java安装信息,由于已经安装OpenJDK了,其安装的目录为: /usr/lib/jvm
>> ls /usr/lib/jvm
[root@flybird ~]# ls /usr/lib/jvm
java java-1.8.0 jre jre-1.8.0
java-1.7.0 java-1.8.0-openjdk jre-1.7.0 jre-1.8.0-openjdk
java-1.7.0-openjdk java-1.8.0-openjdk-1.8.0.91-0.b14.el7_2.x86_64 jre-1.7.0-openjdk jre-1.8.0-openjdk-1.8.0.91-0.b14.el7_2.x86_64
java-1.7.0-openjdk-1.7.0.101-2.6.6.1.el7_2.x86_64 java-openjdk jre-1.7.0-openjdk-1.7.0.101-2.6.6.1.el7_2.x86_64 jre-openjdk
选取java-1.8.0-openjdk-1.8.0.91-0.b14.el7_2.x86_64目录,查看一下目录,发现此目录下仅有jre一个目录,在jre目录下有bin和lib目录。
设置JAVA_HOME
>> vi ~/.bashrc
+ export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.91-0.b14.el7_2.x86_64/jre
重新执行此命令,发现问题依旧, 什么情况呢?
静下来心来,发现此JAVA_HOME设置的目录为JRE,而非JDK,需要指向JDK目录;关于开发类的项目,需要设置的JDK目录,两者是不同的,运行java应用只需JRE。
所以安装一下JDK, 行动继续:
JRE | JDK | |
1.8 | openjdk-8-jre | openjdk-8-jdk |
1.7 | openjdk-7-jre | openjdk-7-jdk |
1.6 | openjdk-6-jre | openjdk-6-jdk |
JRE | JDK | |
1.8 | java-1.8.0-openjdk | java-1.8.0-openjdk-devel |
1.7 | java-1.7.0-openjdk | java-1.7.0-openjdk-devel |
1.6 | java-1.6.0-openjdk | java-1.6.0-openjdk-devel |
发现原来只是按照了JRE,JDK没有安装,所以需要继续安装:
>> yum install java-1.8.0-openjdk
>> yum install java-1.8.0-openjdk-devel
5. 问题解决
重新运行mvn,一切OK, 一个问题就这样被解决了.......
6. 问题回顾
大部分Linux都默认安装的是JRE,但是开发的时候,其实需要的是JDK,所以,不用被误会了......