我想知道为什么mvn显示Java version: 9.0.1,而我当前的java命令是1.8.0_151?谢谢。
$ mvn --version
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T03:58:13-04:00)
Maven home: /home/t/program_files/programming/Maven/apache-maven-3.5.2
Java version: 9.0.1, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-9-oracle
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.13.0-26-generic", arch: "amd64", family: "unix"
$ java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)请注意,我已经安装了java 8和java 9:
$ update-alternatives --config javac
There are 2 choices for the alternative javac (providing /usr/bin/javac).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-9-oracle/bin/javac 1091 auto mode
* 1 /usr/lib/jvm/java-8-oracle/bin/javac 1081 manual mode
2 /usr/lib/jvm/java-9-oracle/bin/javac 1091 manual mode
$ update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-9-oracle/bin/java 1091 auto mode
* 1 /usr/lib/jvm/java-8-oracle/jre/bin/java 1081 manual mode
2 /usr/lib/jvm/java-9-oracle/bin/java 1091 manual mode和
$ which java
/usr/bin/java
$ readlink -f /usr/bin/java
/usr/lib/jvm/java-8-oracle/jre/bin/java$PATH中唯一的一部分是
/usr/lib/jvm/java-8-oracle/bin:
/usr/lib/jvm/java-8-oracle/db/bin:
/usr/lib/jvm/java-8-oracle/jre/bin和
$ echo $JAVA_HOME
/usr/lib/jvm/java-9-oracle/一个我不太明白的解决办法:
$ export JAVA_HOME=/usr/lib/jvm/java-8-oracle/
$ mvn --version
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T03:58:13-04:00)
Maven home: /home/t/program_files/programming/Maven/apache-maven-3.5.2
Java version: 1.8.0_151, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-oracle/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.13.0-26-generic", arch: "amd64", family: "unix"mvn只依赖JAVA_HOME,而java不依赖?
发布于 2018-01-22 04:12:24
mvn命令实际上是一个shell脚本,该脚本决定在运行maven的JVM中使用哪个版本的Java。
决定JVM使用的是$JAVA_HOME和/或$JAVACMD环境变量:
$JAVA_HOME用于查找java命令。通常使用$java_HOME/bin/java。$JVMCMD,则重写$JAVA_HOME。/etc/mavenrc文件或一个~/.mavenrc,那么这些文件首先是“源”文件。因此,它们可以从您的环境中重写$JAVA_HOME等的设置。$JAVA_HOME或$JAVACMD是而不是显式设置,那么"mvn“脚本就会通过特定于平台的方法来寻找”最佳“的安装。您可能会或不可能通过“选择”和/或$PATH的当前设置来选择版本。还要注意,您可以在POM文件中设置Java版本。这些影响到您构建的代码的源版本和目标版本,但它们不影响运行构建的JVM版本。(因此,如果要在POM中选择Java 9并尝试在Java 8 JVM上使用Maven构建,那么Maven将给出一个错误。)
mvn只依赖$JAVA_HOME,而java不依赖?
基本上,是的,有几个细微差别:
mvn的情况,$JAVA_HOME有回退逻辑。java实际上取决于您如何配置$PATH。如果将$JAVA_HOME/bin (或类似的)放在$PATH中的/usr/bin前面,那么shell将不会看到/usr/bin/java,而“替代”设置将是无效的。( Java的替代机制可以通过安装/usr/bin/java、/usr/bin/javac等命令的符号链接来工作。)
update-alternatives --config javac会影响$JAVA_HOME吗?
没有,alternatives系统通过更新符号链接来工作。
底线:
mvn使用特定的JAVA_HOME版本(而不干扰任何其他版本),请在mavenrc文件中导出适当的mavenrc变量。mvn是怎么回事,请阅读脚本!发布于 2018-01-22 03:37:02
为什么
mvn显示Java version: 9.0.1,而我当前的java命令是1.8.0_151?
简单地说,是因为您安装了两个不同版本的Java。当您从命令行输入java时,它使用一个版本。mvn找到了另一个版本。
您可以通过键入以下命令查看使用了哪个java可执行文件
which javamvn的输出显示它使用的是安装在/usr/lib/jvm/java-9-oracle上的JDK。
命令行在键入命令时使用PATH环境变量搜索可执行文件。您可以通过键入
echo $PATH 如果Java 8和Java 9的两个目录都出现在路径中,那么shell将使用找到的第一个目录。您可以调整PATH的顺序,但最好删除默认情况下不想使用的顺序。
发布于 2018-01-22 03:57:49
mvn只依赖JAVA_HOME,而java不依赖?
是的,maven使用$JAVA_HOME环境变量查找java安装,而终端总是引用$PATH查找系统中的可执行文件。
PATH是类Unix操作系统、DOS、OS/2和Microsoft上的一个环境变量,它指定可执行程序所在的一组目录。
因此,如果需要更改maven引用的java版本,则必须更改$JAVA_HOME变量。
更新选项--配置javac不影响JAVA_HOME吗?
不是的。请参阅这
https://stackoverflow.com/questions/48374306
复制相似问题