【问题标题】:Why does ANT tell me that JAVA_HOME is wrong when it is not?为什么 ANT 告诉我 JAVA_HOME 是错误的,而实际上它不是?
【发布时间】:2010-12-06 05:43:06
【问题描述】:

我得到错误:

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

【问题讨论】:

  • 你是如何设置%JAVA_HOME%的?进行更改后,您是否重新启动了 Windows?
  • 我原以为既然我们有了 Windows Vista,就不需要重新启动了——在不重新启动的情况下注册更改有多难。但你知道吗,这似乎起到了作用。
  • 确实,在 XP 及更高版本中您不需要重新启动 Windows。但是您必须生成另一个控制台...
  • 当您在 shell 中设置新的环境变量时,Windows 不会更改已运行程序的环境块。
  • 请查看安装 Apache Ant。 ant.apache.org/manual/install.html

标签: ant classpath java-home


【解决方案1】:
  1. 在 Eclipse 中单击运行外部工具外部工具配置
  2. 单击 JRE 选项卡。
  3. 单击已安装的 JRE... 按钮。
  4. 单击添加按钮。
    (如果适用,请选择标准虚拟机。)
  5. 点击目录按钮。
  6. 浏览到已安装 Java 的 JDK 版本(不是 JRE)
    (例如C:\Program Files\Java\jdk1.7.0_04)。
  7. 点击完成确定
  8. Separate JRE处选择JDK并点击关闭
  9. 重新运行您的 Ant 脚本 — 玩得开心!

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 数小时后,就是这样。确保将 JAVA_HOME 设置为 C:\Program Files\Java\jdk1.6.0_14 。不是 jre 目录,不是 bin 目录
    • 克里斯蒂安所说的是正确的做法。另外,记住不是;在路径之后。傻我知道。
    • "另外,记住不要在路径后面加上 ;。"感谢您的评论。
    【解决方案3】:

    我在尝试使用以下命令运行 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” .

    我通过在我的<javac> 任务中设置fork="yes" 解决了这个问题。

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

    【讨论】:

    • 该死的。我完全忘记了叉子。谢谢!
    • 您可能在 JDK/bin 之前的 PATH 中有 JRE/bin(安装程序会这样做)。因为 ant 是一个通过 java.exe 运行的 java 程序 - 如果它选择 JRE/bin/java.exe,它将根据 JRE 位置设置 JAVA_HOME。如果 JDK/bin 首先在路径中,它将从 JDK 获取 java.exe 并将 JAVA_HOME 设置为 JDK 位置。 fork="yes" 有效,因为运行了一个新进程,javac.exe 运行,它不在 JRE/bin 中,所以跳到 JDK/bin 并在那里找到它。干杯 - 马克
    【解决方案4】:

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

    【讨论】:

    • 我不能大声尖叫。这正是我做错的。当我将它指向 JDK 时,它一直在自动猜测,试图使用不存在的 JRE。这真是令人沮丧。正如@tom 所说,只需从您的 JAVA_HOME 中删除尾随 bin/,它就会起作用。
    【解决方案5】:

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

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

    这将:

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

    【讨论】:

      【解决方案6】:

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

      • 确保 JAVA_HOME 设置正确。您可以在命令行中的 Windows 上检查它: C:>回显%JAVA_HOME% 结果看起来像:C:\Progra~1\Java\jdk1.6.0_30\
      • 将文件 tools.jar 从 %JAVA_HOME%\lib 复制到 Maven 的 lib 目录。

      它对我有用。

      【讨论】:

        【解决方案7】:

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

        【讨论】:

        • 到类路径?如果是这样,是全局条目还是其他?
        • 我在 Eclipse 中运行一个简单的嵌入式码头应用程序。我添加了 GLASSFISH JSP 支持,但一直收到此错误。我在这里尝试了几种解决方案。唯一对我有用的是这个建议……从 JDK lib 目录中添加 tools.jar。谢谢。
        【解决方案8】:

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

        【讨论】:

          【解决方案9】:

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

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

          【讨论】:

            【解决方案10】:

            分号让我失望:我将 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 页面声明使用分号,但这似乎破坏了它。

            【讨论】:

            • 天啊...一个小时以来一直在与此错误作斗争。谢谢布兰登,这真的救了我。
            【解决方案11】:

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

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

            【讨论】:

              【解决方案12】:

              实际上在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)之前,我的系统运行良好。 Ant 是 1.8.4 版本

              【讨论】:

                【解决方案13】:

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

                【讨论】:

                  【解决方案14】:

                  如果其他一切都正确,请尝试以下操作

                  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 列表中上移来优先使用它。

                  【讨论】:

                    【解决方案15】:

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

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

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

                    【讨论】:

                      【解决方案16】:

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

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

                      【讨论】:

                        【解决方案17】:

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

                        【讨论】:

                          【解决方案18】:

                          我也遇到了同样的问题。我使用的是 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。

                          【讨论】:

                            【解决方案19】:

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

                            【讨论】:

                              【解决方案20】:

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

                              【讨论】:

                                【解决方案21】:

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

                                【讨论】:

                                  【解决方案22】:

                                  遇到同样的问题;

                                  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

                                  【讨论】:

                                    【解决方案23】:

                                    快速解决同样的问题

                                    将 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。

                                    【讨论】:

                                      【解决方案24】:

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

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

                                      【讨论】:

                                        猜你喜欢
                                        • 2017-03-12
                                        • 1970-01-01
                                        • 2015-10-11
                                        • 1970-01-01
                                        • 2023-03-15
                                        • 2012-07-25
                                        • 2022-11-27
                                        • 1970-01-01
                                        • 2020-02-16
                                        相关资源
                                        最近更新 更多