如何更改 ant 的 JAVA_HOME?

Posted

技术标签:

【中文标题】如何更改 ant 的 JAVA_HOME?【英文标题】:How do I change the JAVA_HOME for ant? 【发布时间】: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 什么都不返回,所以可能不会。我会调查一下,但任何信息都会很有用。 【参考方案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。

【讨论】:

我根据 meta 上的这个问题编辑了您的电子邮件:meta.stackexchange.com/questions/89965/… 通常这也适用于答案。

以上是关于如何更改 ant 的 JAVA_HOME?的主要内容,如果未能解决你的问题,请参考以下文章

在cygwin中运行ant返回JAVA_HOME设置不正确

为啥 ANT 告诉我 JAVA_HOME 是错误的,而实际上它不是?

JMeter+ant+Jenkins部署持续集成环境

JAVA_HOME 应该指向 JDK 还是 JRE?

java电脑环境变量配置

设置 JAVA_HOME 时出错