我想改变使用sun jdk打开jdk的maven java home。我该怎么办?
root@ak-EasyNote-TM98:~# mvn -version
Apache Maven 3.0.4
Maven home: /usr/share/maven
Java version: 1.6.0_24, vendor: Sun Microsystems Inc.
Java home: /usr/lib/jvm/java-6-openjdk-amd64/jre
Default locale: tr_TR, platform encoding: UTF-8
OS name: "linux", version: "3.2.0-34-generic", arch: "amd64", family: "unix"
Edit:
很抱歉。我忘了写下面的代码:
root@ak-EasyNote-TM98:~$ java -version
java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)
我的java home默认路径已经是sun jdk了。但maven java home指向openjdk。我想只为maven修复它。
答案 0 :(得分:47)
如果您使用的是Linux,请使用语法export JAVA_HOME=<path-to-java>
设置JAVA_HOME。实际上它不仅仅适用于Maven。
答案 1 :(得分:25)
我使用Mac ,上面的答案都没有帮助我。我发现maven从以下指定的路径加载了自己的JAVA_HOME:~/.mavenrc
我将文件的内容更改为:JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home
对于 Linux ,它看起来像:
JAVA_HOME=/usr/lib/jvm/java-8-oracle/jre
答案 2 :(得分:4)
上面有很好的帮助,但如果你有像我一样的环境,这就是我开始工作的方式。
编辑此文件/etc/profile.d/apache-maven.sh,如下所示,请注意它会影响整个系统。
$ cat /etc/profile.d/apache-maven.sh
MAVEN_HOME=/usr/share/apache-maven
M2_HOME=$MAVEN_HOME
PATH=$MAVEN_HOME/bin:$PATH
# change below to the jdk you want mvn to reference.
JAVA_HOME=/usr/java/jdk1.7.0_40/
export MAVEN_HOME
export M2_HOME
export PATH
export JAVA_HOME
答案 3 :(得分:4)
强制MAVEN的特定JVM的最佳方法是创建由mvn脚本加载的系统范围文件。
此文件为x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wl,-Bsymbolic-functions -Wl,-z,relro -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security build/temp.linux-x86_64-2.7/src/cyipopt.o -L/usr/local/lib/ -lipopt -lcoinhsl -lcoinlapack -lcoinblas -lcoinmumps -lcoinmetis -o build/lib.linux-x86_64-2.7/ipopt/cyipopt.so
/usr/bin/ld: cannot find -lcoinhsl
/usr/bin/ld: cannot find -lcoinlapack
/usr/bin/ld: cannot find -lcoinblas
/usr/bin/ld: cannot find -lcoinmumps
/usr/bin/ld: cannot find -lcoinmetis
collect2: error: ld returned 1 exit status
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
,并且必须声明指向您的特定JVM的/etc/mavenrc
环境变量。
示例:
JAVA_HOME
如果该文件存在,则已加载。
以下是export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
脚本的摘录,以便了解:
if [ -f /etc/mavenrc ] ; then . /etc/mavenrc fi if [ -f "$HOME/.mavenrc" ] ; then . "$HOME/.mavenrc" fi
或者,可以在mvn
答案 4 :(得分:4)
如果要处理的多个项目需要构建不同的Java版本,则无需为每个构建设置新的JAVA_HOME
环境变量值。而是像这样执行Maven:
JAVA_HOME=/path/to/your/jdk mvn clean install
它将使用指定的JDK进行构建,但不会更改您的环境变量。
演示:
$ mvn -v
Apache Maven 3.6.0
Maven home: /usr/share/maven
Java version: 11.0.6, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.15.0-72-generic", arch: "amd64", family: "unix"
$ JAVA_HOME=/opt/jdk1.8.0_201 mvn -v
Apache Maven 3.6.0
Maven home: /usr/share/maven
Java version: 1.8.0_201, vendor: Oracle Corporation, runtime: /opt/jdk1.8.0_201/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.15.0-72-generic", arch: "amd64", family: "unix"
$ export | grep JAVA_HOME
declare -x JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
答案 5 :(得分:3)
即使您安装了Oracle JDK,您的ACTION_CANCEL
变量也应该引用JDK根目录中JRE 的路径。您可以参考my other answer to a similar question了解更多详情。
答案 6 :(得分:2)
只需设置JAVA_HOME env属性。
答案 7 :(得分:2)
假设您使用的是Ubuntu,似乎是https://askubuntu.com/questions/21131/how-to-correctly-remove-openjdk-and-jre-and-set-the-system-use-only-and-only-sun#answer-21137的副本。
关键是使用命令sudo update-java-alternatives -s java-6-sun
。任何依赖javac
的命令都会受到影响,而不仅仅是Maven。
答案 8 :(得分:0)
我的Ubuntu服务器14.04上有两个Java版本:java 1.7
和java 1.8
。
我需要使用java 1.8
构建一个项目。
如果我使用java -version
我得到了
java version "1.8.0_144"
但是当我mvn -version
时,我得到了:
Java version: 1.7.0_79, vendor: Oracle Corporation
java8
我这样做:
export JAVA_HOME=/usr/lib/jvm/java-8-oracle/jre/
然后当我mvn -version
时,我得到了:
Java version: 1.8.0_144, vendor: Oracle Corporation