从Java运行Ant时设置JAVA_HOME

时间:2009-03-16 20:30:27

标签: java ant javac

原因很漫长而且很无聊,但是我需要运行一个Ant脚本来从Java 1.4应用程序编译Java 1.5代码。我不断收到这个错误:

BUILD FAILED

build.xml:16: 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:\j2sdk1.4.2_16\jre"

在我的代码中,我有:

Project p = new Project();
p.setUserProperty("ant.file", buildFile.getAbsolutePath());
p.setProperty("java.home", "C:\Program Files\Java\jdk1.6.0_04");
p.fireBuildStarted();
p.init();
// so on and so forth

但它忽略了它。我也尝试过p.setUserProperty(String,String),但这也不起作用。有没有办法在不启动单独流程的情况下完成?

5 个答案:

答案 0 :(得分:5)

构建文件中的javac任务是否有fork="yes"?如果没有,那么java.home属性设置为什么并不重要; ant将尝试在同一个java进程中调用javac Main方法,该错误来自您的错误是JRE,而不是JDK。

编辑尝试将javac任务的executable属性设置为javac二进制文件的完整路径,并将compiler="extJavac"添加到任务中。

答案 1 :(得分:1)

反斜杠不应该加倍吗?

p.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.6.0_04");

答案 2 :(得分:0)

您是否正确设置了环境变量JAVA_HOME和ANT_HOME?如果您通过代码设置它应该可以工作。

同时检查你的%JAVA_HOME%\ bin目录%ANT_HOME%\ bin是否应该在环境变量'path'中。

你的问题似乎是在envt中没有出现%JAVA_HOME%\ bin。可变路径。

答案 3 :(得分:0)

使这项工作的另一种方法是将“tools.jar”添加到类路径中。 javac编译器包含在这个jar中。

java -cp $ JAVA_HOME / lib / tools.jar ...

答案 4 :(得分:0)

javac选项在tools.jar中可用。在eclipse中,即使您的JRE HOME指向jdk,所有系统库都指向JDK_HOME \ jre \ lib。没有tools.jar。您可以将tools.jar添加为外部Jar文件。这应该可以解决您的问题