作为一个实验,我们希望使用Eclipse编译器(从eclipse.org下载的ECJ-3.5.jar)在运行时版本的Java6(而不是JDK )上构建我们的产品,据我了解,这是一个将这个jar添加到ant类路径,并将build.compiler属性设置为指向适配器的问题。
通过包括
<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" />在我的build.xml中,通过使用JRE调用ant,我得到了无法找到适配器的预期错误,通过将ecj-3.5.jar添加到Eclipse中的类路径中,我可以按预期编译代码。我相信,在命令行中使用"-lib foo.jar“与现代蚂蚁具有相同的功能。
现在,我想在build.xml内部指定,我希望我的类路径上的ecj-3.5.jar满足与上面相同的要求。我们已经可以用蚂蚁来完成这个任务了,所以我相信这是可能的。
因此,问题是:如何在javac使用的类路径中添加仅从build.xml中定位编译器的类路径?
看来即将发布的Eclipse1.0包含了Eclipse编译器(这就是我想要使用的),所以通过升级到ant4eclipse编译器(从0.5升级)应该可以解决我们的问题。
2010-09-24: Ant4Eclipse仍在M4上,没有说明何时会发布.
2011-12-01:我们现在已经从蚂蚁迁移到了maven。build.xml脚本碰到了复杂性墙,需要一种新的方法。任何需要选择该做什么的人--除了琐碎的项目之外,不要走ant4eclipse路径。
2012-11-30:一年后,maven的体验仍然很好。心态上有很多怪癖和变化,但大多数在上下文中是有意义的。Maven可以很容易地在单个项目上指定编译器级别。我们正在研究使用ecj而不是javac (出于几个原因),但对于大多数目的,javac工作得很好。
发布于 2010-03-02 15:17:58
一种方法是在使用javac时指定对组件One的引用。
<componentdef name="ecj"
classname="org.eclipse.jdt.core.JDTCompilerAdapter"
classpath="ecj-3.7.1.jar" />
<javac ....>
<ecj/>
</javac>另一种选择是为javac设置build.compiler或编译器属性,然后为javac指定编译器compilerclasspath。这是一个类似于普通路径的结构,用于保存用于加载编译器适配器的类路径。
<javac compiler="org.eclipse.jdt.core.JDTCompilerAdapter" ....>
<compilerclasspath>
...
</compilerclasspath>
</javac>有关更多细节,请参阅Ant手册中的javac任务文档。请注意,这两种解决方案都只能从Ant 1.8开始工作。
发布于 2010-03-03 17:29:49
阅读通过Java运行Ant。我认为您可以编写一个简单的包装器,它将正确设置类路径并将jar文件添加到生成的类路径中。
这里,我只是从上面的链接中剪切和粘贴示例,并添加了您感兴趣的库到类路径中:
<java
classname="org.apache.tools.ant.launch.Launcher"
fork="true"
failonerror="true"
dir="${sub.builddir}"
timeout="4000000"
taskname="startAnt"
>
<classpath>
<pathelement location="${ant.home}/lib/ant-launcher.jar"/>
<pathelement location="/path/to/ecj-3.5.jar"/>
</classpath>
<arg value="-buildfile"/>
<arg file="${sub.buildfile}"/>
<arg value="-Dthis=this"/>
<arg value="-Dthat=that"/>
<arg value="-Dbasedir=${sub.builddir}"/>
<arg value="-Dthe.other=the.other"/>
<arg value="${sub.target}"/>
</java>我认为您甚至可以重用同一个构建文件,只需给出一个不同的目标作为入口点。
https://stackoverflow.com/questions/2364006
复制相似问题