作为实验,我们想在Java 6的运行时版本上使用Eclipse Java编译器(从eclipse.org下载的ecj-3.5.jar)而不是JDK来构建产品,据我了解,这是添加的问题。此jar到ant类路径,然后将build.compiler属性设置为指向适配器。
通过包括
<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" />
在我的build.xml中,并使用JRE调用ant时,出现了无法找到适配器的预期错误,并且通过将ecj-3.5.jar添加到Eclipse面板的类路径中,可以按预期编译我的代码。我相信现代 Ant 可以在命令行中使用“-lib foo.jar”使用相同的功能。
现在,我想从build.xml中指定要让我的类路径上的ecj-3.5.jar满足上述要求。我们已经可以通过 Ant 任务做到这一点,所以我相信这是可能的。
所以问题是:我如何才能添加到javac所使用的类路径中,以仅从build.xml内找到编译器?
看来即将发布的ant4eclipse 1.0包括Eclipse编译器(这是我要使用的),因此,通过将其升级(从0.5开始)应该可以解决我们遇到的问题。
2010-09-24:Ant4Eclipse仍在M4上,没有指示何时发布。
2011-12-01:我们现在已经从 Ant 迁移到Maven。 build.xml脚本触及了复杂性壁,因此需要一种新的方法。任何需要选择做什么的人-除了琐碎的项目外,不要走ant4eclipse的道路。
2012-11-30:一年后,行家经验仍然很不错。心态上有很多怪异和变化,但大多数情况下都有意义。 Maven可以轻松地在各个项目上指定编译器级别。我们正在研究使用ecj而不是javac(出于多种原因),但是对于大多数用途而言,javac都能很好地工作。
最佳答案
一种方法是在使用javac时指定对componentdef的引用。
<componentdef name="ecj"
classname="org.eclipse.jdt.core.JDTCompilerAdapter"
classpath="ecj-3.7.1.jar" />
<javac ....>
<ecj/>
</javac>
另一种选择是根据需要设置build.compiler或为javac设置编译器属性,然后为javac指定compileclasspath。这是一个类似于结构的普通路径,用于保存用于加载编译器适配器的类路径。
<javac compiler="org.eclipse.jdt.core.JDTCompilerAdapter" ....>
<compilerclasspath>
...
</compilerclasspath>
</javac>
有关更多详细信息,请参见Ant手册中的javac task文档。请注意,这两种解决方案都只能从Ant 1.8开始使用。