【问题标题】:Setting JAVA_HOME when running Ant from Java从 Java 运行 Ant 时设置 JAVA_HOME
【发布时间】:2009-03-16 20:30:26
【问题描述】:

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

【问题讨论】:

  • 仅供参考:java.home 必须设置为 $JAVA_HOME/jre,而不是 $JAVA_HOME 本身。

标签: java ant javac


【解决方案1】:

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

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

【讨论】:

  • 添加 fork="yes" 确实有帮助——至少 javac 可以运行,但它仍然是错误的版本。
  • 我正在寻找类似“可执行”属性的东西,但没有看到。我必须为每个 javac 任务设置它,这很烦人,但它确实有效。谢谢。
【解决方案2】:

反斜杠不应该加倍吗?

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

【讨论】:

  • 他们是。我认为粘贴到 StackOverflow 时出了点问题。
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 2021-11-06
        • 2011-10-07
        • 1970-01-01
        • 1970-01-01
        • 2014-04-30
        • 1970-01-01
        • 1970-01-01
        • 2016-03-26
        相关资源
        最近更新 更多