我已经安装了java的Ubuntu 10.10。我能够从任何文件夹执行java命令。我想这可能是因为我设置了java Classpath。但是JAVA_HOME和CLASSPATH都没有被设置。
如果我查看/ etc / environment内容,我可以看到PATH被设置为/ usr / bin /(等等)。当'which java
'返回/ usr / bin / java时,这就是我可以从任何地方执行java的原因吗?如果没有,为什么呢?
答案 0 :(得分:3)
您可以执行java,因为该命令位于您的路径上。
echo $PATH
将显示搜索的目录,以及查找特定程序的顺序。由于/usr/bin
位于您的路径上,因此当您输入java
时,它最终会查看/usr/bin/java
。请注意,在许多系统中,这是一个符号链接(指向另一个文件的文件),因此/usr/bin/java
通常指向/etc/alternatives/java
(这也是指向真实可执行文件的符号链接)。
环境变量JAVA_HOME
发挥作用的是工具和程序,它们检查JAVA_HOME
并对其采取行动而不是依赖路径。在大多数现代Linux系统中,替代子系统完成的工作取代了早期(更有问题的)JAVA_HOME
技术。也就是说,如果您遇到需要它的工具,您可能还想设置JAVA_HOME
。
JAVA_HOME
不尽如人意的一个原因是访问JAVA_HOME
您需要运行shell,而不是每个人都想在shell命令中包装每个Java项目。
答案 1 :(得分:1)
是的,如果java二进制文件(或其链接)位于路径上列出的文件夹上,那么您可以执行java而不指定它的路径(例如/usr/local/java/latest/bin/java -jar x.jar
)
JAVA_HOME和CLASSPATH与系统路径无关。
JAVA_HOME允许其他软件(或脚本)知道在哪里查找java安装。
CLASSPATH告诉java在哪里查找类(编译.java文件的.class文件)。