61

我得到错误:

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 从哪里得到这个值?

4

24 回答 24

79
  1. 在 Eclipse 中单击RunExternal ToolsExternal Tools Configurations
  2. 单击JRE选项卡。
  3. 单击已安装的 JRE...按钮。
  4. 单击添加按钮。
    (选择Standard VM,如果适用。)
  5. 单击目录按钮。
  6. 浏览到您安装的 Java 的 JDK 版本(不是 JRE)
    (例如C:\Program Files\Java\jdk1.7.0_04)。
  7. 单击“完成”“确定”
  8. 在单独的 JRE中选择 JDK,然后单击关闭
  9. 重新运行您的 Ant 脚本——玩得开心!

这适用于我遇到的特定场景。

于 2012-07-03T12:01:42.537 回答
34

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

如果不是这样,我建议您编辑ant.bat批处理文件(以及它所调用的任何内容-我不记得它是否令人费解)以在开始时和其他各种有趣的地方打印出 JAVA_HOME。

于 2009-10-13T07:59:59.240 回答
19

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

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

于 2012-06-01T00:00:20.473 回答
16

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

于 2011-04-05T21:00:49.377 回答
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
于 2013-01-01T20:00:54.273 回答
7

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

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

它对我有用。

于 2012-10-09T08:22:30.913 回答
5

为了解决这个问题,在 window->preferences->ant-> runtime 添加 tools.jar 文件。

于 2011-08-25T09:40:48.763 回答
4

在 Eclipse 中,将已安装的 JRE 设置设置为项目中的 JDK(项目属性 -> Java 构建路径 -> 库),或首选项中的全局默认设置(Java->已安装的 JRE)。eclispe 设置比系统变量强。

于 2011-06-04T07:21:36.000 回答
3

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

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

于 2009-10-13T08:05:40.417 回答
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页面声明使用分号,但这似乎破坏了它。

于 2011-07-11T19:40:33.710 回答
2

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

<javac srcdir="${srcDir}" destdir="${buildDir}" fork="true" executable="C:\Program Files\Java\jdk1.7.0_03\bin\javac"/>
于 2012-09-11T09:38:08.037 回答
2

如果您已JAVA_HOME设置但其中有错字,您还会看到对 jre6 路径的虚假引用。

于 2011-03-31T16:26:58.220 回答
2

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

  1. 转到窗口 -> 首选项 -> Ant -> 运行时 -> 类路径
  2. 展开全局条目并在此处查看可用的 jdk 工具。
  3. 从特定版本的 java 添加所需的 tools.jar,例如“C:\Program Files\Java\jdk1.6.0_45\lib\tools.jar”
  4. 现在构建并检查结果。

注意:为您要使用的 java 编译器添加 tools.jar,当存在多个 tools.jar(java 编译器)时,通过在 tools.jar 列表中向上移动它来优先使用它。

于 2014-03-27T21:14:06.093 回答
2

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

零意义......我唯一能想到的是 Sun 在最新的 Java 运行时(Java 7 Update 11)中引入了这个错误,或者在 Ant 中如何读取当前 JDK 位置的错误(JRE 比 JDK 更新得更多)显然这对 Sun 来说也是愚蠢的......他们每次更新 JRE 时都应该发布 JDK)。

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

在最新的 Sun JRE7 更新(10 和 11)之前,我的系统运行良好。蚂蚁是版本 1.8.4

于 2013-01-25T22:06:51.220 回答
1

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

  1. 转到“运行”-> 外部工具-> 外部工具配置

  2. -> 选择 'JRE' 然后从下拉列表中选择可用的 JDK 。前任。jdk1.8.0_25

于 2016-01-14T18:59:41.020 回答
0

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

于 2013-12-17T22:09:16.570 回答
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

于 2014-01-06T16:30:34.450 回答
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。

于 2014-06-20T19:51:25.060 回答
0

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

于 2013-12-17T21:07:05.677 回答
0

我有同样的问题。JAVA_HOME 指向的我的 JDK 包没有任何 tools.jar 确保您的 JDK 安装有 tools.jar

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

于 2012-10-16T11:25:38.393 回答
0

将环境变量中的 JAVA_HOME 设置为D:\Program Files\IBM\SDP\jdk 不提供任何引号或分号。这对我有用。请尝试解决方案。实际上,在 ant.bat 中,它会检查是否合适JAVA_HOME,以防 ant.bat 无法找到它,那么它会JAVA_HOME指向默认的 JRE。

于 2012-06-04T15:19:25.537 回答
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。

于 2013-04-25T11:25:26.143 回答
0

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

于 2013-09-08T12:48:57.307 回答
0

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

<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
于 2016-03-24T17:05:58.863 回答