我们正在使用自带SDK的产品。此SDK包含:
现在,一些Ant脚本使用javac
任务编译Java代码。现在,我想找到用于此的javac
可执行文件。我检查了以下内容:
JAVA_HOME
设置为包含的JRE。整个过程没有安装另一个JDK。javac.exe
。javac.exe
。build.compiler
似乎无法在Ant脚本中的任何位置设置。fork
任务中未设置executable
,compiler
和javac
属性。我没有关于在哪里看的想法。还有什么其他可能性?如何找到使用的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
任务?
答案 0 :(得分:1)
我的一位同事终于解开了这个谜团。
我所知道的是,Ant使用位于JAVA_HOME
下的JDK。然而,在错误的假设下,我使用javac.exe
进行编译。嗯,事实并非如此。 Ant使用位于sun.tools.javac.Main
的{{1}}。那个Jar,以及tools.jar
只带有一个JDK,但在我的情况下,它包含在产品SDK中并手动添加到Ant的类路径中。