我如何使JDK成为默认的JRE?

我在Eclipse中使用Ant脚本,而Eclipse在Windows XP上使用默认的JRE安装。

当我想要运行用javac-tag编译的ant脚本时,会遇到麻烦,因为在classpath中没有tools.jar,所以会失败。

我已经意识到,如果我能使JDK成为Windows上的默认Java,那么我将拥有我今天的东西,加上ant开箱即用。

可以这样做吗? 我在安装过程中错过了什么?


编辑:我知道的JAVA_HOME,但是这是繁琐和容易出错(手动更新环境variables,当一个新鲜的JDK可用并不总是我记得)。


编辑:我结束了弄清楚如何使javac任务使用Eclipse编译器(ecj.jar),这很好地工作。


编辑:Maven也支持使用Eclipse编译器,但这似乎很less使用,并与旧版本的ecj.jar。 我打算稍后再看看。


编辑:与maven-compiler-plugin 3.0一起使用ecj工作得非常好,并允许使用JRE构build。


编辑:当parsing由ecj生成的字节码时,我遇到了javadoc工具崩溃的问题。

答案是“不”,安装时没有办法让JDK成为默认的JVM。

正如其他答案指出的那样,您可以调整您的路径,并将您的JAVA_HOME指向JDK或完全不同的JVM。 这实际上是Java安装首先完成的。

但是,你的问题是你想要找到tools.jar。 要做到这一点,你可以将它复制到默认JVM下的ext目录中。 在这里检查JDK文件结构。 这可能会起作用。

另一方面,如果修改JAVA的JAVA_HOME和PATH变量看起来很烦人,请记住,这只是我们保持敏锐的一系列开玩笑之一,糟糕的是我们仍然需要在2009年这样做www.smiley-faces.org/smiley-faces/smiley-face-smile.gif

  1. 从网站下载JDK
  2. 一切完成后,进入控制面板
  3. 打开JAVA
  4. 点击Java选项卡并选择View
  5. 列表中会有一个项目。 将Java路径从JRE更改为您下载的JDK,如下所示: C:\Program Files\Java\<your_jdk_version>\bin\java.exe
    例如,我的看起来像这样: C:\Program Files\Java\jdk1.7.0_07\bin\java.exe

将tools.jar文件复制到Eclipse正在查找的位置可能会起作用,但是这是一个混乱和脆弱的环境,因为这是您下次升级JDK时可能不记得的一个步骤。 更好的是说服Eclipse在适当的位置寻找它。

将JAVA_HOME设置为正确的位置适用于某些工具,但Eclipse并不尊重它 。

几件事情要尝试:

  • 确保在Preferences-> Java-> Installed JRE下标识并选择了JDK。

  • 确保Ant正在被JDK调用。 一个线索是,在控制台输出的顶部,您应该看到正在使用的javaw.exe的路径。 如果这条路径在JRE中,则需要更令人信服的。 检查运行 – >外部工具 – >外部工具配置 – > [你的Ant构建] – > JRE ,并确保那里的设置指向JDK。

尝试更改JAVA_HOME环境变量以指向JDK而不是JRE。

另外或可能另外, 任何Windows系统目录之前 ,将PATH条目添加到JDK bin目录。

我怀疑JAVA_HOME足以让Ant工作,但是在路径上获取JDK版本的java等也是很好的,所以当你从命令行运行java ,你将会得到你一样的版本运行javac

你可能可以编写一个WSH脚本来自动重新配置你的路径。

这个JScript脚本只是打印一些信息:

 //file: jdk.js usage: cscript /Nologo jdk.js var objShell = WScript.CreateObject("WScript.Shell"); function setJdk(version) { try { var jdk = objShell.RegRead("HKEY_LOCAL_MACHINE\\SOFTWARE\\" + "JavaSoft\\Java Development Kit\\" + version + "\\JavaHome"); if(jdk != null && jdk != "") { jdk += "\\bin"; var path = objShell.RegRead("HKEY_CURRENT_USER\\Environment\\Path"); path = jdk + ";" + path; WScript.Echo("Could set PATH to " + path + "\n"); } } catch(err) { /*probably key does not exist*/ } } setJdk("1.7"); setJdk("1.6"); setJdk("1.5"); 

有一个RegWrite方法可用于写入注册表。 有一些工作需要确定最新的版本和重新调整路径,删除过时的条目以及分拣系统和用户路径。 毫无疑问,它也可以用来设置JAVA_HOME 。 JDK条目需要出现在system32目录之前,因为JRE安装程序将java.exe放在那里。

(我不能100%确定shell是否会接受这样的更改,或者是否需要重新启动/ env变量重新加载。)

这通常是通过将您的JAVA_HOME环境变量设置为您要使用的根JDK目录来完成的。

例如,从命令行或批处理文件中,您只需执行以下操作:

 set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_14 

但是,要设置JAVA_HOME,将其永久添加到“ 我的电脑 ”属性表中“ 高级”选项卡上的环境变量中。

显然Eclipse可以在没有tools.jar情况下编译。 我猜测他们有一个特定的javac命令,可以使用JRE(而不是JDK); 这可能是他们可以列出警告的原因。

无论如何,我会采用标准的方式(如上所示),并在您的系统上安装JDK。 您甚至可以通过调整eclipse.ini文件(请参阅这些说明 )来启动具有特定JDK的Eclipse(无需任何JAVA_HOME更改)。

因为这是可行的。 不明白为什么人们对这个问题说不。 复制tools.jar不是一个明智的方式,我使用eclipese时遇到了问题,只需将jdk而不是jre添加到我的构建路径中即可。

这里是细节:

http://www.gamefromscratch.com/post/2011/11/15/Telling-Eclipse-to-use-the-JDK-instead-of-JRE.aspx