5

原因很长而且很无聊,但是我需要运行一个 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),但这也不起作用。有没有办法在不启动单独进程的情况下做到这一点?

4

5 回答 5

6

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

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

于 2009-03-16T21:02:42.207 回答
0

反斜杠不应该加倍吗?

p.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.6.0_04");
于 2009-03-16T20:58:02.577 回答
0

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

还要检查您的 %JAVA_HOME%\bin 目录 %ANT_HOME%\bin 是否应该在环境变量“路径”中。

您的问题似乎是环境中不存在 %JAVA_HOME%\bin 。可变路径。

于 2009-03-17T05:44:11.860 回答
0

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

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

于 2013-11-05T06:36:35.307 回答
0

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

于 2014-03-13T06:01:49.477 回答