如何更改 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
【讨论】:
【参考方案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 之前。
设置<javac exectuable="/path/to/javac">
另一种选择是将相应的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?的主要内容,如果未能解决你的问题,请参考以下文章