解释unix中java安装路径的不一致性?

解释unix中java安装路径的不一致性?,java,unix,environment-variables,Java,Unix,Environment Variables,我在我的系统中安装了java大约6个月。我在这里盲目地遵循这个指示。我下载了jdk,解包,根据文档中的说明设置路径Java_Home,路径 今天我想知道,我的系统中安装了哪个java以及安装在哪里。所以,我在网上查了一下,然后运行了这个命令 readlink-f$(哪个java) 上面说 /usr/local/java/jre1.7.0_40/bin/java 但是当我检查Java_Home变量时,它说 /usr/lib/jvm/jdk1.7.0_40 这里两条路径都引用JDK1.7,但它们是不

我在我的系统中安装了java大约6个月。我在这里盲目地遵循这个指示。我下载了jdk,解包,根据文档中的说明设置路径Java_Home,路径

今天我想知道,我的系统中安装了哪个java以及安装在哪里。所以,我在网上查了一下,然后运行了这个命令

readlink-f$(哪个java)

上面说

/usr/local/java/jre1.7.0_40/bin/java

但是当我检查Java_Home变量时,它说

/usr/lib/jvm/jdk1.7.0_40

这里两条路径都引用JDK1.7,但它们是不同的。一个在/usr/lib/jvm中,另一个在/user/local/java中

我想,由于一些混乱,我把java_设置得不正确。我必须在两个地方取消jdk标记。而且,在设置java_主页时,我选择了错误的路径。或者这是两个位置之间的某种链接,这是由于我运行了一些我不知道的命令

无论如何,我可以正确运行java程序和eclipse等,所以一切都很好,正因为如此,我从未注意到这一点


但是,我想知道是否需要修复java_home变量以确保上述两个命令返回相同的值。如果没有必要,为什么当'readlink-f$(哪个java)'和java_home返回不同的路径时,这个设置可以正常工作呢

这是两件不同的事情

第一个告诉您JRE(Java运行时环境)和Java二进制文件的位置。运行JAR文件时需要这个


javahome告诉您JDK(JAVA开发工具包)和javac二进制文件的位置。编译和打包JAR文件时需要用到它。

这是两件不同的事情

第一个告诉您JRE(Java运行时环境)和Java二进制文件的位置。运行JAR文件时需要这个

javahome告诉您JDK(JAVA开发工具包)和javac二进制文件的位置。编译和打包JAR文件时需要它。

readlink-f$(哪个java)
只告诉您在shell中键入
java
时执行哪个文件
JAVA_HOME
是一些程序用来定位JAVA的环境变量。因为这两个变量都指向一个
1.7
jre/jdk,所以它们之间的差异应该不会太大。使用
JAVA\u HOME
的程序将使用JDK
JAVA
,而仅使用
JAVA
命令行的程序将使用JRE版本

如果您真的需要将它们更改为指向相同的java,那么您应该不要更改
java\u HOME
,而是更改
java
符号链接,因为指向JDK通常比指向JRE好,因为有些程序要求
java\u HOME
必须指向JDK(例如,因为这些程序需要JRE中未包含的
javac

readlink-f$(哪个java)
只告诉您在shell中键入
java
时执行哪个文件。
java\u HOME
是一些程序用来定位java的环境变量。由于这两个变量都指向
1.7
jre/jdk,它们之间的区别应该不重要。使用
java\u HOME
的程序将使用jdk
java
和仅使用
java
命令行的程序将使用JRE版本


如果您真的需要将它们更改为指向相同的java,那么您应该不要更改
java\u HOME
,而是更改
java
符号链接,因为指向JDK通常比指向JRE好,因为有些程序要求
java\u HOME
必须指向JDK(例如,因为这些程序需要JRE中未包含的
javac

您的JAVA\u主页应该与您选择的JAVA版本匹配。我使用以下设置了我的JAVA\u主页:

export JAVA_HOME=`readlink -f  /usr/bin/javac | sed 's|/bin/javac||g'`
我使用Debain/Ubuntu
update java alternations
命令来选择我使用的java版本。它确保它不仅更新
/usr/bin/java
,还更新所有其他java命令,如
javac
javadoc

sudo update-java-alternatives --set java-7-oracle
您可以获得系统上安装的Java发行版列表:

update-java-alternatives -l
大多数程序不同时依赖于JAVA\u HOME和您要使用的
JAVA
。通常它们依赖于其中一个,但不是两者都依赖。因此,对于任何给定的应用程序,它可能会运行,但不同的应用程序可能会使用不同版本的JAVA运行。根据我的经验,大多数已安装的JAVA应用程序都会使用
/usr/bin/java
大多数开发环境将使用java\u HOME

正确地指定JAVA_HOME和setting
/usr/bin/JAVA
可以确保几乎所有JAVA应用程序都使用首选(和最新)版本的JAVA运行

然而,这条规则也有一些明显的例外,一些使用Java运行的程序有自己的配置来选择使用哪个版本的Java

例如,我运行tomcat7服务器,我必须有配置文件
/usr/share/tomcat7/bin/setenv.sh
,该文件仅为该应用程序设置JAVA_主目录:

JAVA_HOME=`readlink -f  /usr/bin/javac | sed 's|/bin/javac||g'`
JAVA_OPTS="-Xms256m -Xmx2048m -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -XX:MaxPermSize=512M -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

其他程序,如Eclipse。它有自己的算法来计算它将在哪个版本的Java下运行,并且有一个
-vm
命令行选项,允许您指定您的首选项。

您的Java\u主页应该与您选择的Java版本相匹配。我使用以下设置了我的Java\u主页:

export JAVA_HOME=`readlink -f  /usr/bin/javac | sed 's|/bin/javac||g'`
我使用Debain/Ubuntu
update java alternations
命令来选择我使用的java版本。它确保它不仅更新
/usr/bin/java
,还更新所有其他java命令,如
javac
javadoc

sudo update-java-alternatives --set java-7-oracle
您可以获得系统上安装的Java发行版列表:

update-java-alternatives -l
大多数程序并不同时依赖于JAV