Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从JAVA运行Ant时设置JAVA_HOME_Java_Ant_Javac - Fatal编程技术网

从JAVA运行Ant时设置JAVA_HOME

从JAVA运行Ant时设置JAVA_HOME,java,ant,javac,Java,Ant,Javac,原因很长也很无聊,但我需要运行一个Ant脚本来从Java1.4应用程序编译Java1.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:\j2sd

原因很长也很无聊,但我需要运行一个Ant脚本来从Java1.4应用程序编译Java1.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),但这也不管用。有没有一种方法可以在不启动单独流程的情况下执行此操作?

反斜杠是否应该加倍

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

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


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

是否正确设置了环境变量JAVA\u HOME和ANT\u HOME?如果您是通过代码进行设置,那么它应该可以工作

还要检查%JAVA\u HOME%\bin目录%ANT\u HOME%\bin是否应位于环境变量“path”中


您的问题似乎是环境中不存在%JAVA\u HOME%\bin。变量路径。

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


java-cp$java_HOME/lib/tools.jar…

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

他们是。我认为粘贴到StackOverflow时出现了一些问题。添加fork=“yes”确实有帮助——至少可以运行javac,但它仍然是错误的版本。我正在寻找类似“executable”属性的内容,只是没有看到它。我不得不为每个javac任务设置它,这很烦人,但它可以工作。Thank.FYI:
java.home
必须设置为
$java\u home/jre
,而不是
$java\u home
本身。