查找Ant

时间:2018-01-15 12:46:28

标签: java ant javac

我们正在使用自带SDK的产品。此SDK包含:

  • 它自己的JRE安装
  • 它自己的Ant安装
  • 一些用于构建内容的Ant脚本
  • 使用包含的脚本调用Ant的一些批处理脚本

现在,一些Ant脚本使用javac任务编译Java代码。现在,我想找到用于此的javac可执行文件。我检查了以下内容:

  • 批处理脚本暂时将JAVA_HOME设置为包含的JRE。整个过程没有安装另一个JDK。
  • 包含的JRE是JRE而不是JDK。所以没有找到javac.exe
  • SDK中的其他任何地方都没有javac.exe
  • build.compiler似乎无法在Ant脚本中的任何位置设置。
  • fork任务中未设置executablecompilerjavac属性。

我没有关于在哪里看的想法。还有什么其他可能性?如何找到使用的Java编译器可执行文件?

我现在省略任何Ant片段或类似内容,因为它们非常复杂,而且我不能100%确定哪些部分是相关的。如果您想看某个部分,请在评论中告诉我。

修改

到目前为止,感谢Robert的新见解:

有一些taskdef。他们中的大多数引用jar中的类,实现Task。它们都不会导入任何与编译器相关的包。然而,还有作为库加载的ant-contrib:

<taskdef resource="net/sf/antcontrib/antlib.xml">
    <classpath>
        <pathelement location="${ant.home}/lib/ant-contrib.jar"/>
    </classpath>
</taskdef>

我不熟悉这个库,但它似乎包含一些可以进行编译的任务。 CompileWithWalls导入org.apache.tools.ant.taskdefs.Javac。但是在Ant脚本中没有调用compilewithwalls目标。问题仍然存在:如果从任何这些库中使用编译器,它将如何绑定到默认的javac任务?

1 个答案:

答案 0 :(得分:1)

我的一位同事终于解开了这个谜团。

我所知道的是,Ant使用位于JAVA_HOME下的JDK。然而,在错误的假设下,我使用javac.exe进行编译。嗯,事实并非如此。 Ant使用位于sun.tools.javac.Main的{​​{1}}。那个Jar,以及tools.jar只带有一个JDK,但在我的情况下,它包含在产品SDK中并手动添加到Ant的类路径中。

进一步阅读:http://mindprod.com/jgloss/javacmain.html