【问题标题】:JAVA_HOME does not point to the JDKJAVA_HOME 不指向 JDK
【发布时间】:2012-06-28 13:34:38
【问题描述】:

我正在尝试学习有关如何使用 ant 构建和运行您的应用程序的教程。我已经按照所有步骤创建了构建文件,但是当我尝试运行 ant 时,它给了我这个错误。

构建失败 /home/bilal/tmp/ant/build.xml:19:找不到javac编译器; com.sun.tools.javac.Main 不在类路径中。 也许 JAVA_HOME 不指向 JDK。 当前设置为“/usr/lib/jvm/java-6-openjdk/jre”

任何想法如何解决这个问题?

【问题讨论】:

    标签: java ant environment-variables


    【解决方案1】:

    使 JAVA_HOME 变量指向 jdk 安装,而不是 jre

    您引用的是运行时环境,而不是开发工具包——它找不到编译器,因为它不存在。

    从您发布的行中,您可以在末尾删除 jre:

    export JAVA_HOME='/usr/lib/jvm/java-6-openjdk/'
    

    【讨论】:

    • 它已经在错误信息中告诉你,当前路径是“/usr/lib/jvm/java-6-openjdk/jre”。只需删除最后的“jre”即可。
    • 在我执行此操作后 export JAVA_HOME=/usr/lib/jvm/java-6-openjdk/ 它仍然抛出相同的错误,说明它当前设置为“/usr/lib/jvm/ java-6-openjdk/jre"
    • 这被标记为解决方案,但它没有提供解决方案。
    • 这个答案没有给出解决方案,为什么它被接受和赞成?
    • @NimChimpsky 我刚刚根据 ingyhere 的回答解决了 Ubuntu12.04 中的问题。 Changin JAVA_HOME 不能解决问题,因为 ant 不会使用该值,并且 alawys 显示它指向 jre 子文件夹
    【解决方案2】:

    你安装了 java...

    apt-get install default-jre
    

    但不是 JDK...

    apt-get install default-jdk
    

    【讨论】:

    • @ingyhere 按照这里的建议安装default-jdk 解决了我的问题。
    • @Mark Stosberg 首先,我删除了我之前的评论,因为它是为了跟进 cmets 的另一个答案。对于后代,此页面上的上下文也不清楚。所以,这个想法是 Ant 应该在 JRE 中运行,不管怎样。但是,要编译应用程序,需要 JDK。 Ant Javac 任务应该(或至少习惯于)默认通过嗅探内部属性来查找 Java 编译器 (javac)。因此,如果没有明确指定 Javac“可执行”属性,它可能会找到错误的东西。安装 JDK 是先决条件,是的,当然,没有它是个问题。
    【解决方案3】:

    对于centos yum -y install java-1.7.0-openjdk-devel.x86_64

    并更新 JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk.x86-64

    【讨论】:

      【解决方案4】:

      这是设计使然。您不能将 ant 的 java.home(这是一个 java.lang.System 属性)与在操作系统环境中设置的 JAVA_HOME 互换使用。您可能正在尝试使用来自不同属性层的根本不同的值来断言 Java 编译器的位置——即 java.home(来自 Ant 的 Java 内部)指向 Java 运行时环境 <any_installed_java_pointed_to_by_ant>/jre 而 JDK_HOME(来自操作系统环境)通常设置为<DOWNLOADED_AND_INSTALLED_JAVA_DEVELOPMENT_KIT>

      更多详情请看我的问答:Where does Ant set its 'java.home' (and is it wrong) and is it supposed to append '/jre'?

      解决方案是使用${env.JAVA_HOME} 访问Ant 中的系统环境属性。通过将executable 属性设置为javac 路径并将fork 属性设置为yes(请参阅Ant's Javac Task Documentation),指定在Javac 任务中显式使用哪个java。这样一来,无论 Ant 里面运行什么 Java 环境,编译器总是明确指定的!

      【讨论】:

      • 我不会说这是解决方案。它解释了发生了什么,而不是如何解决它。我遇到了同样的问题,它是 Ant,而不是我,它似乎可以互换使用 java.home 和 JAVA_HOME。我的 JAVA_HOME 是正确的,但 Ant 似乎在附加 /jre 然后抱怨它!
      • @Dave Rager:Ant 正在按设计运行
      • 我用的不是java.home Ant 是。它告诉我我的 JAVA_HOME 不正确,并给我它的 java.home 作为它的值。这对我来说似乎很糟糕
      • docs.oracle.com/javase/tutorial/essential/environment/… -- "Java 运行时环境 (JRE) 的安装目录。"请注意,它没有说 Java 开发工具包。它是由系统根据应用程序正在执行的虚拟机检测到的。
      【解决方案5】:

      我知道这个问题很老,但接受的答案不再起作用,因为这是谷歌搜索的第一个链接,我会告诉我如何解决这个问题。

      对于使用 ubuntu 的 Eclipse:

      转到 Window->Preferences->Ant->Runtime->选择 Ant_Home_Entries 并单击添加外部 jars 然后在文件资源管理器中找到您的 jdk 所在的位置(默认位于 /usr/lib/jvm/ 中)和 lib您的 jdk 文件夹中,您将找到 tool.jar。选择这个并点击应用。

      尝试构建您的项目,一切都会成功!

      注意:我已经很长时间没有使用 ant,但如果有人被/被困在这个问题上,我需要它来用于 ycsb couchbase 工作负载生成器 (http://www.couchbase.com/wiki/display/couchbase/Load+Generator+Setup)。

      【讨论】:

        【解决方案6】:

        我使用的是 Windows 7,并且遇到了同样的问题。我通过更改我的环境变量来修复它。

        改变你的环境变量click here

        我在路径变量的末尾添加了“;%JAVA_HOME%/bin”并添加了一个新的“JAVA_HOME”变量并将其值设置为我的 JDK 的位置“C:\Program Files\Java\jdk1.8.0_11 ”。之后我重新启动了我的 Node.js 命令提示符并且它工作了。

        请注意,您的 JDK 目录可能与我的不同。此外,根据您的设置,您可能需要在设置环境变量后重新启动计算机。

        【讨论】:

          【解决方案7】:

          我刚刚将 tools.jar 文件从 JDK\lib 文件夹复制到 JRE\lib 文件夹。从那时起,它就像一个冠军。

          【讨论】:

          • 这并没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post。 - From Review
          • @mjp66,你试过了吗?它没有提供问题的答案?怎么来的?我们不需要澄清,不仅是作者,任何遇到问题的人都可以澄清我相信。什么是足够的声誉???
          • 这是最好的答案!它有效,不需要我不知道应该在哪里写的命令
          【解决方案8】:

          看起来您当前正在将 JAVA_HOME 指向 /usr/lib/jvm/java-6-openjdk/jre,这似乎是 JRE 而不是 JDK。尝试将 JAVA_HOME 设置为/usr/lib/jvm/java-6-openjdk

          JRE 不包含 Java 编译器,只有 JDK(Java Developer Kit)包含它。

          【讨论】:

            【解决方案9】:

            您上面的 JAVA_HOME 只指向 JRE,它不包含编译器。将您的 JAVA_HOME 设置为

            /usr/lib/jvm/java-6-openjdk
            

            ...再试一次。

            【讨论】:

            • 别人已经给出了这个答案,你只是在重复别人。
            【解决方案10】:

            我遇到了类似的问题,结果发现问题出在 OpenJDK 6 和 7 版本上。答案来自 ubuntu 论坛上的 r-senior (http://ubuntuforums.org/showthread.php?t=1977619) --- 只需卸载版本 6:

            sudo apt-get remove openjdk-6-*

            确保没有将 JAVA_HOME 和 CLASSPATH 设置为任何内容,因为这实际上不是问题所在。

            【讨论】:

              【解决方案11】:

              在基本 OS Luna(基于 Ubuntu 12.04 LTS 源)上尝试使用 Meteor 1.0 运行 android 模拟器时遇到此问题。

              openjdk-6-jdk 以及 jre 已安装。最后,没想到会成功,我尝试了:

              sudo apt-get remove openjdk-6-*
              

              这导致了完全预期的错误,所以我跟进了

              sudo apt-get install openjdk-6-jdk
              

              一切顺利。去图吧。

              【讨论】:

                【解决方案12】:

                在 Ubuntu 14.04 上,我找到了解决问题的两个部分:

                1. 从环境变量中删除/jre。对我来说:export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/
                2. 安装 JDK 和 JRE:sudo apt-get install default-jdk

                【讨论】:

                  【解决方案13】:

                  按照答案中的说明更新 JAVA_HOME 路径后,您应该这样做:

                  $source ~/.bashrc
                  

                  当您再次检查时,这将刷新 bashrc 在 $JAVA_HOME 中显示更新的路径。

                  【讨论】:

                    【解决方案14】:

                    执行:

                    $ export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-3.b16.el6_9.x86_64
                    

                    并设置操作系统环境:

                    vi /etc/environment
                    

                    然后按照以下步骤操作:

                    1. 按我
                    2. 粘贴

                      JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-3.b16.el6_9.x86_64
                      
                    3. 按 esc

                    4. 按:wq

                    【讨论】:

                      【解决方案15】:

                      我在 rhel 中遇到了这个问题,我的“JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk”(这是一个符号链接),并且 ant 抱怨。

                      我的解决方案是在 JAVA_HOME 中使用真正的 jdk 路径,例如:

                      JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64

                      它对我有用。

                      【讨论】:

                        【解决方案16】:

                        在 Jenkins 下,它抱怨如下:

                        /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/ 看起来不像 JDK 目录

                        原因:找不到任何适用于 JDK 的开发工具包。

                        解决方案:

                        请确保安装 openjdk-devel 软件包以及您的 JDK-1.8* 版本并使用以下命令重新导出:# source ~/.bash_profile

                        【讨论】:

                          猜你喜欢
                          • 2013-05-30
                          • 1970-01-01
                          • 1970-01-01
                          • 2014-11-10
                          • 2017-09-15
                          • 2019-02-27
                          • 2019-04-19
                          • 1970-01-01
                          相关资源
                          最近更新 更多