java -version 与 javac -version的区别,看图说话。

立志尚早 发布于 2013/03/28 11:07
阅读 8K+
收藏 1

 

 

 

系统环境变量配置为  jdk1.7

删除C:\Windows\System32  下的java.exe 和javaw.exe 依旧没解决

 

each  %path%   结果

D:\ShenTong\bin;D:\ShenTong\jre\bin;D:\ShenTong\bin;D:\ShenTong\jre\bin;C:\Windo
ws\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPower
Shell\v1.0\;C:\Program Files\WIDCOMM\Bluetooth Software\;C:\Program Files\WIDCOM
M\Bluetooth Software\syswow64;C:\Program Files (x86)\Common Files\Roxio Shared\1
0.0\DLLShared\;C:\Program Files (x86)\Common Files\Roxio Shared\DLLShared\;C:\Pr
ogram Files (x86)\Java\jdk1.7.0\bin;%CATALINA_HOME%\bin

 

each %JAVA_HOME%

 

 问题的来源,在研究apcahe开源项目 lucene时,把lucene必须包 放到了  jdk1.7的lib目录下  执行

java org.apache.lucene.demo.IndexFiles F:\FileTest\Lucene\file  命令报如下错误

参考文章 http://blog.csdn.net/csh624366188/article/details/6823209

 

查询是jdk版本不匹配   然后就用了 下java 与 javac命令  继而就想探讨下区别。

加载中
0
立志尚早
立志尚早

问题已经解决了。

首先,感谢各位的帮助。接下来就分享下方法吧。

按照上面所说 问题解决  关键是  将%JAVA_HOME%\bin  放到path变量的最前面。

那么这样后面的问题就没错了 

欢迎mark  

rwang_os
rwang_os
非常好的方法,thx
0
逝水fox
逝水fox

这个得看PATH怎么定义的。

看看你Windows的System32下的那个java.exe是什么版本的,删掉。有几个版本的jdk安装程序会丢个java.exe过去,不删掉他永远读到的都是他。

立志尚早
立志尚早
回复 @逝水fox : 哦。。。看错了 ,已经解决了 。还是很感谢你的帮助。
逝水fox
逝水fox
回复 @jianli : 不是说cd,是说java命令的 -cp 也就是 -classpath 参数可以指定外部的jar包
立志尚早
立志尚早
回复 @逝水fox : 嗯 ,cd这个我会。之前是用cd 到jar包目录下执行java报错,后来才拷进去的。
逝水fox
逝水fox
回复 @逝水fox : 另外 修改了环境变量需要重新打开命令提示符。还有就是外部的jar包即使不在CLASSPATH下也可以用java命令的-cp参数指定,不用甩去JDK的lib,系统包的目录还是不要放其他的包。具体可以搜索一下这个参数
逝水fox
逝水fox
回复 @jianli : D:\ShenTong\jre\bin PATH里面这个去了,就是这个的原因造成你的java命令不对
下一页
0
震秦
震秦

这个问题是你的系统里边装了2个以上的jdk造成的,而且是jdk1.5是后安装的.

原因是:

jdk版本高于1.5的,在安装时会把java.exe, javaw.exe复制到Windows系统的C:\Windows\system32下.而javac.exe却没有复制. Windows系统会把C:\Windows\system32当做系统的首选Path.

你的Java_home是指向jdk1.7的. 因此javac -version时显示的是1.7版本, java -version显示1.5版本

想要同时显示1.7, 可以到C:\Windows\system32把java.exe, javaw.exe手动删除, 这样在试试各个version

立志尚早
立志尚早
删除之后还是老样子。
立志尚早
立志尚早
删除java.exe和javaw.exe对系统没影响吧?
0
Erroooooor
Erroooooor

java和javac是两个东西 后者是编译器 也就是说前者是jdk版本后者是java编译器的版本

从上面的内容可以看出来你classpath下的jdk应该是1.5的

立志尚早
立志尚早
不对啊,系统环境变量里JAVA_HOME是1.7的 对应classpath也就是1.7的啊
0
震秦
震秦

引用来自“震秦”的答案

这个问题是你的系统里边装了2个以上的jdk造成的,而且是jdk1.5是后安装的.

原因是:

jdk版本高于1.5的,在安装时会把java.exe, javaw.exe复制到Windows系统的C:\Windows\system32下.而javac.exe却没有复制. Windows系统会把C:\Windows\system32当做系统的首选Path.

你的Java_home是指向jdk1.7的. 因此javac -version时显示的是1.7版本, java -version显示1.5版本

想要同时显示1.7, 可以到C:\Windows\system32把java.exe, javaw.exe手动删除, 这样在试试各个version

删吧, 没啥影响. jdk1.5以上这样做是为了那些不配置Java_home, classpath, path等能正确运行java程序的,删除了他们没啥影响, 只要你Java环境变量设置正确都没什么.

删除了, 记得重新启动一个新的控制台,执行他们. 

同时看看你的Java_home的设置, 看看path指向的哪里?

echo %JAVA_HOME%

echo %PATH%

立志尚早
立志尚早
可以看出都是1.7 ,但是java -version 还是1.5
0
南湖船老大
南湖船老大

楼上说的都是正确的,楼主一定要认真看,理解了再去做。

假设我现在安装的是旧版本的JDK1.5,那么在系统环境变量里我们设置了java_home和classpath,对应存放的注册表项是 (HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Environment),JDK在安装的过程当中将在注册表会生成如下3个项目:
HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Development Kit
HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Plug-in
HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment
同时,JDK安装程序将会把java.exe,javaw.exe,javaws.exe这3个可执行文件拷贝 到%SystemRoot%\system32目录下,由于%SystemRoot%\system32被操作系统缺省的设置为最高优先权的PATH搜索 路径,因此可保证用户在命令行任何目录下可运行java.exe来启动JVM

立志尚早
立志尚早
嗯,说的有道理。这个注册表我也在网上搜索过此类问题,但是我的 没有Java Development Kit项目
0
南湖船老大
南湖船老大
删注册表,删%SystemRoot%\system32目录下的文件
立志尚早
立志尚早
按照2楼的说法,已经删除了
0
風一樣的男子
風一樣的男子
环境遍历没配置好,不说了
0
LucEsape
LucEsape

java -version 是Java的版本信息

javac -version 是Java compile的版本信息

返回顶部
顶部