【问题标题】:How do I change the JAVA_HOME for ant?如何更改 ant 的 JAVA_HOME?
【发布时间】:2010-10-09 01:31:46
【问题描述】:

我在没有 root 权限的类服务器上做 java 工作。每当我尝试使用 ant 编译时,它都会指向错误的目录(/usr/tomcat 而不是 /usr/tomcat/jre )。

在设置用户帐户时,我们被告知要做的一件事是将export JAVA_HOME=/usr/tomcat/jre 添加到 .bashrc 文件中。我不知道这是否应该解决问题,但似乎没有。

那么,我怎样才能更改 ant 的 JAVA_HOME 属性,但仅限于我运行 ant 时?

编辑: echo $JAVA_HOME 指向 /usr/tomcat/jre echo $JAVA_HOME\bin 指向/usr/tomcat/jrebin

问题是当我正常运行 ant 时出现此错误:

Unable to locate tools.jar. Expected to find it in /usr/tomcat/lib/tools.jar
Buildfile: build.xml

compile:
    [javac] Compiling 1 source file to /home/ejm244/build/classes

BUILD FAILED
/home/ejm244/build.xml:9: 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

Total time: 0 seconds

【问题讨论】:

  • echo $ANT_HOME 什么都不返回,所以可能不会。我会调查一下,但任何信息都会很有用。

标签: ant java-home


【解决方案1】:

您可以创建自己的脚本来运行 ant,例如命名为 ant.sh 喜欢:

#!/bin/sh
JAVA_HOME=</path/to/jdk>; export JAVA_HOME
ant $@

然后运行你的脚本。

$ chmod 755 ant.sh
$./ant.sh clean compile

或您希望运行的任何 ant 目标

【讨论】:

  • 使用jre 不起作用;它不包含 ant 要求的工具
  • 试过这个,不影响ant的JAVA_HOME
【解决方案2】:

JAVA_HOME 应该指向 JDK 的安装位置,而不是 JRE。

那么,如果你输入 ls $JAVA_HOME 你会看到什么? 如果你这样做 ls $JAVA_HOME/bin/ 你看到 javac 了吗?

如果第一个不起作用,那么您没有指向正确目录的 JAVA_HOME。 如果第二个不起作用,那么您需要将 JAVA_HOME 指向 JDK 而不是 JRE。

【讨论】:

  • 我认为你的意思是 $JAVA_HOME/bin/(正斜杠)
  • ack - 我的学生使用 Windows 太多了 :-) 谢谢!
  • 你是对的;但是,“ant.java.home”属性将始终指向一个 jre,因为它充实了 java.lang.System(根据定义是 JDK 下的 JRE)中的该属性。要在 ant 中明确设置 Java 环境,请使用 ${env.JAVA_HOME} 指定 java 位置和确切路径。
【解决方案3】:

查看调用 ant 的 shell 脚本,在 .bashrc 中为你的 shell 设置的 $JAVA_HOME 的值可能会在文件 /etc/ant.conf、$HOME/.ant/ant.conf 中被覆盖, 和 $HOME/.antrc。如果您执行 bash -x ,它将发出调试信息,帮助您追踪 $JAVA_HOME 被覆盖的位置。

【讨论】:

    【解决方案4】:

    在我的 Windows 7 机器设置上:

    JAVA_HOME="C:\Program Files\Java\jdk1.6.0_18"

    没用。但是设置:

    JAVA_HOME=C:\Program Files\Java\jdk1.6.0_18

    工作。

    【讨论】:

      【解决方案5】:

      修改编译器有两种方式:

      • export JAVA_HOME=/path/to/jdk 在你启动 Ant 之前。
      • 设置&lt;javac exectuable="/path/to/javac"&gt;

      另一种选择是将相应的tools.jar 添加到类路径中,但这通常用于从其他工具(如 Maven)启动 Ant。

      有关在 Ant 中更改 Java 编译器的这些(或其他)选项的更多详细信息,请参阅 this article 示例。

      【讨论】:

        【解决方案6】:

        设置环境变量: JAVACMD - Java 可执行文件的完整路径。使用它来调用与 JAVA_HOME/bin/java(.exe) 不同的 JVM。

        参考:http://ant.apache.org/manual/running.html

        【讨论】:

          【解决方案7】:

          虽然环境变量JAVA_HOME 设置正确,但ant 可以使用每个build.xml 或任何构建文件中配置的JRE。

          要检查 ant 正在使用的 JRE 版本,请右键单击构建文件 -> 选择显示有关要选择的任务等详细信息的构建 ant,然后选择要使用的 JRE。

          建议使用项目级别设置或仅在工作区级别。

          【讨论】:

            【解决方案8】:

            如果您尝试编译代码,JAVA_HOME 需要指向 JDK 主目录。检查“/usr/tomcat/jre/bin/javac”是否存在。我怀疑它确实如此。

            如果您没有 JDK,那么您可以通过获取 ECJ(eclipse 编译器)库,将其放入 '~/.ant/lib' 并将系统属性添加到命令行来解决它使用那个编译器——查看 Ant 手册了解详情。

            http://ant.apache.org/

            【讨论】:

            • 仔细阅读该错误消息:无法找到 tools.jar。预计会在/usr/tomcat/lib/tools.jar 中找到,这表明JAVA_HOME 实际上是/usr/tomcat 而不是/usr/tomcat/jre。由于某种原因,JAVA_HOME 的错误值覆盖了 shell 值。
            • @laz 这并不重要 - 根本原因是 OP 试图使用 JRE 运行 Ant,而他应该使用 JDK,就像 nbeyer 指出的那样
            【解决方案9】:

            将项目中的 JRE(项目属性 -> Java 构建路径 -> 库,通常是最后一个条目)或首选项中的全局默认值(Java->已安装的 JRE)设置为 JDK,而不是 JRE。

            【讨论】:

              【解决方案10】:

              当使用 Bash 时,试试这个:

              $ export JAVA_HOME=/usr/tomcat/jre
              

              【讨论】:

                【解决方案11】:

                当从 shell 运行 ant 时,您不需要先export JAVA_HOME,这将为您当前的 shell 和所有未来的命令设置该变量,而是使用

                user@host:~# JAVA_HOME=/path/to/jdk ant targets
                

                【讨论】:

                  【解决方案12】:

                  您需要将 JAVA_HOME 路径更改为 Java SDK 目录而不是 Java RE 目录。在 Windows 中,您可以在命令提示符中使用 set 命令来执行此操作。

                  例如

                  设置 JAVA_HOME="C:\Program Files\Java\jdk1.6.0_14"

                  【讨论】:

                    【解决方案13】:

                    试试这个:

                    /usr/sbin/update-alternatives --config java
                    

                    【讨论】:

                      【解决方案14】:

                      java_home 始终指向 jdk,即为您提供类的编译器, 并且 jre 是您的浏览器或任何编译类的方式,因此它必须在版本中匹配 jdk 和 jre。

                      【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2023-03-15
                      • 2018-02-26
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2011-09-11
                      • 2020-07-17
                      相关资源
                      最近更新 更多