为什么ANT告诉我JAVA_HOME不是错误的?

时间:2009-10-13 07:55:57

标签: ant classpath java-home

我收到错误:

C:\ dev \ ws \ springapp \ build.xml:81:无法找到javac编译器; com.sun.tools.javac.Main不在类路径上。 也许JAVA_HOME并没有指向JDK。 它目前设置为“C:\ Program Files \ Java \ jre6”

但我已经明确将我的JAVA_HOME设置为C:\ Program Files \ Java \ jdk1.6.0_14

ANT在哪里获得此值?

24 个答案:

答案 0 :(得分:76)

  1. 在Eclipse中,单击运行外部工具外部工具配置
  2. 点击 JRE 标签。
  3. 点击已安装的JRE ... 按钮。
  4. 点击添加按钮 (如果适用,请选择标准VM 。)
  5. 点击目录按钮。
  6. 浏览到已安装Java的JDK版本(而不是JRE) (例如C:\Program Files\Java\jdk1.7.0_04)。
  7. 点击完成确定
  8. 单独JRE 中选择JDK,然后单击关闭
  9. 重新运行你的Ant脚本 - 玩得开心!
  10. 这适用于我遇到的特定情况。

答案 1 :(得分:33)

当你说你已经“明确地将”JAVA_HOME设置为“C:\ Program Files \ Java \ jdk1.6.0_14”时 - 你从命令行运行“set”时看到的是什么?我相信如果没有设置,Ant会猜测JAVA_HOME的值...你有可能设置JAVAHOME而不是JAVA_HOME吗?

如果它不是那样的话,我建议你编辑ant.bat批处理文件(以及它所调用的任何内容 - 我不记得它是否是错综复杂的,或者不是随意的)来打印出JAVA_HOME的开头和其他各种有趣的地方。

答案 2 :(得分:17)

当我尝试使用以下命令运行Ant构建时遇到了同样的问题:

java -cp ant.jar:ant-launcher.jar org.apache.tools.ant.Main

命令的输出是:

BUILD FAILED
XXX/build.xml:8: Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "/usr/lib/jvm/java-6-openjdk/jre"

似乎java可执行文件正在选择“/ usr / lib / jvm / java-6-openjdk / jre”作为JAVA_HOME,而不是安装了JDK的“/ usr / lib / jvm / java-6-openjdk”

我通过在fork="yes"任务中设置<javac>来解决此问题。

看看:http://ant.apache.org/manual/Tasks/javac.html

答案 3 :(得分:15)

你也可能在你的JAVA_HOME设置中包含/ bin,而Ant正在向它添加/ bin - 从而找不到任何exe。它发生在我身上:}

答案 4 :(得分:8)

确保使用尾随分号:这不起作用:

set JAVA_HOME=C:\Program Files (x86)\Java\jdk1.6.0_29;

这将:

set JAVA_HOME=C:\Program Files (x86)\Java\jdk1.6.0_29

答案 5 :(得分:7)

我遇到了类似的问题。我会链接从Maven构建运行Ant任务,我得到了问题。我已将其修改为以下步骤:

  • 确保JAVA_HOME设置正确。您可以在命令行中的Windowns上检查它: C:&gt; echo%JAVA_HOME% 结果如下:C:\ Progra~1 \ Java \ jdk1.6.0_30 \
  • 将文件tools.jar从%JAVA_HOME%\ lib复制到Maven的lib目录。

它对我有用。

答案 6 :(得分:5)

要解决此问题,请在window-&gt; preferences-&gt; ant-&gt;中添加tools.jar文件。运行时。

答案 7 :(得分:4)

在eclipse中,将已安装的JRE设置设置为JDK - 在项目中(项目属性 - > Java Build Path-&gt; Libraries),或者在首选项中设置全局默认值(Java-&gt; Installed JREs)。 eclispe设置比系统变量强。

答案 8 :(得分:3)

我希望您了解系统和用户环境变量。用户优先于系统。如果您已在系统变量中设置了JAVA_HOME,并且在用户变量中存在相同的条目,那么您将只获得后者。

右键单击我的电脑,转到属性,选择高级选项卡,然后单击环境变量以查看用户和系统环境变量列表。

答案 9 :(得分:3)

分号让我失望:我将JAVA_HOME设置为“C:\ jdk1.6.0_26;”而不是“C:\ jdk1.6.0_26”。在按照Jon Skeet的建议检查ant.bat文件后,我删除了尾随分号。这是该文件的一部分:

if "%JAVA_HOME%" == "" goto noJavaHome
if not exist "%JAVA_HOME%\bin\java.exe" goto noJavaHome

因此,分号没有被删除,导致无法找到该文件,因此默认为“C:\ Java \ jre6”或类似的东西。

令人困惑的部分是HowtoBuild页面声明使用分号,但这似乎打破了它。

答案 10 :(得分:2)

我遇到了同样的问题,将javac标记中的可执行属性设置为javac.exe的位置为我解决了问题。 这解决了问题

<javac srcdir="${srcDir}" destdir="${buildDir}" fork="true" executable="C:\Program Files\Java\jdk1.7.0_03\bin\javac"/>

答案 11 :(得分:2)

如果您设置了JAVA_HOME但是其中有拼写错误,您还会看到对jre6路径的虚假引用。

答案 12 :(得分:2)

实际上在superuser.com上找到了这个答案,但我不得不将tools.jar从我的JDK \ lib目录复制到JRE \ lib目录。

让ZERO感觉到......我唯一能想到的是Sun在最新的Java运行时(Java 7 Update 11)中引入了这个bug,或者在Ant如何读取当前JDK位置(JRE更新更新)中引入了一个错误显然,这也是Sun的愚蠢......他们应该在每次更新JRE时释放JDK。

我的JAVA_HOME设置正确。我确认做了“设置JAVA_HOME”。它指向我的JDK目录并拼写正确。但是,Ant声称它找不到javac,但认为JAVA_HOME在我的JRE目录中。

在最新的Sun JRE7更新(10和11)之前,我的系统工作正常。 Ant是版本1.8.4

答案 13 :(得分:2)

当其他一切正确时,请尝试以下

  1. 转到窗口 - &gt;偏好 - &gt;蚂蚁 - &gt;运行时 - &gt;类路径
  2. 展开全局条目并查看此处提供的jdk工具。
  3. 从特定版本的java添加所需的tools.jar,例如“C:\ Program Files \ Java \ jdk1.6.0_45 \ lib \ tools.jar”
  4. 现在构建并检查结果。
  5. 注意:为您想要使用的java编译器添加tools.jar,并在存在多个tools.jar(java编译器)时,通过在tools.jar列表中将其移动来优先使用它。

答案 14 :(得分:1)

只需从以下步骤设置JDK路径:

  1. 转到&#39;运行&#39; - &gt;外部工具 - &gt;外部工具配置

  2. - &GT;选择&#39; JRE&#39; 然后从DropDown列表中选择可用的JDK。恩。 jdk1.8.0_25

答案 15 :(得分:0)

如果需要在eclipse中使用内置的eclipse jdk运行ant,请在build.xml中添加以下行

<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>

答案 16 :(得分:0)

快速解决同样的问题

将C:\ Program Files \ Java \ jdk1.6.0_14 \ lib \ tools.jar复制到C:\ Program Files \ Java \ jre6 \ lib \

此异常即将发生,因为JAVA_HOME被设置为C:\ Program Files \ Java \ jre6,而Ant无法在其中找到tools.jar。

答案 17 :(得分:0)

有同样的问题;

c:\jb\src\build.xml:191: Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "C:\Program Files\Java\jre7"

Total time: 0 seconds

c:\jb\src>echo %JAVA_HOME%
c:\Program Files\Java\jdk1.7.0_13

溶液:

path = c:\ant\bin\;%PATH%
path = c:\Program Files\Java\jdk1.7.0_17\bin;%PATH%
set "JAVA_HOME=c:\Program Files\Java\jdk1.7.0_13"

我猜jdk路径指令本身就可以做到,但是我想懒得弄清楚解决方案是防弹。 : - )

还使用Windows7

答案 18 :(得分:0)

仅供参考,我使用的是Windows 7并且必须重新启动Windows才能使新的JAVA_HOME设置生效。

答案 19 :(得分:0)

这个问题很常见。我无法在我的系统中设置任何特定的Java主页,因为我有不同版本的Java(Java 6和Java 7)用于不同的环境。 要解决此问题,我在打开build.xml文件时在运行配置中包含了JDK路径。 这样,2个不同的构建文件使用2个不同的Java版本进行构建。 我认为这个问题可能有更好的解决方案,但至少上述方法避免设置JAVA_HOME变量。

答案 20 :(得分:0)

在使用Jenkins构建项目时遇到了这个问题。首先,它找不到ant.bat,这是通过将ant.bat的路径添加到系统环境变量路径来修复的。然后ant无法找到jdk目录。通过右键单击my computer > properties > advanced > environment variables并创建名为JAVA_HOME的新环境变量并为其指定值C:\Program Files\Java\jdk1.7.0_21,可以解决此问题。不要在“用户变量”中创建此环境变量。仅在系统变量下创建它 在这两种情况下,我都必须重新启动系统。

答案 21 :(得分:0)

我也遇到了同样的问题。我使用的是Windows 7,我安装了两个版本的java。首先,我安装了最新版本的java 7,然后安装了第5版。

我的java安装目录的内容:

C:\Program Files\Java>
jdk1.5.0_14
jdk1.7.0_17
jre1.5.0_14
jre7

我的JAVA_HOME设置为正确的值,即:

C:\>set ja
JAVA_HOME=C:\Program Files\Java\jdk1.5.0_14

但我仍然遇到同样的问题:

XXXXXXX\build.xml:478: The following error occurred while
executing this line:
XXXXXXX\build.xml:477: Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "C:\Program Files\Java\jre7"

在尝试了这个帖子中的所有建议后,我意识到自己的错误。我试图在“用户变量”而不是“系统变量”部分中设置环境变量。在“系统变量”中设置后,它工作正常。我现在面临另一个问题。

它指向的java的默认版本仍然是7。

C:\>java -version
java version "1.7.0_17"
Java(TM) SE Runtime Environment (build 1.7.0_17-b02)
Java HotSpot(TM) Client VM (build 23.7-b01, mixed mode, sharing)

我不确定如何指出第5版。

答案 22 :(得分:0)

我遇到了同样的问题。我的JDK包由JAVA_HOME指出没有任何tools.jar 确保您的JDK instal.lation具有tools.jar

(显然消息错误令人困惑)

答案 23 :(得分:0)

将环境变量中的JAVA_HOME设置为D:\Program Files\IBM\SDP\jdk 不要给任何引号或分号。它适用于我。请尝试解决方案。 实际上在ant.bat中,如果ant.bat无法找到它,那么它会检查适当的JAVA_HOME,然后JAVA_HOME指向默认的JRE。