Java 在build.xml中完全从_指定Eclipse编译器
作为一个实验,我们希望在java 6的运行时版本上使用EclipseJava编译器(从Eclipse.org下载的ecj-3.5.jar)而不是JDK来构建我们的产品,据我所知,只需将这个jar添加到ant类路径,并将build.compiler属性设置为指向适配器 包括Java 在build.xml中完全从_指定Eclipse编译器,java,ant,javac,Java,Ant,Javac,作为一个实验,我们希望在java 6的运行时版本上使用EclipseJava编译器(从Eclipse.org下载的ecj-3.5.jar)而不是JDK来构建我们的产品,据我所知,只需将这个jar添加到ant类路径,并将build.compiler属性设置为指向适配器 包括 <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" /> 在build.xml中,通过JRE调用an
<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" />
在build.xml中,通过JRE调用ant,我得到了预期的错误,即找不到适配器,通过将ecj-3.5.jar添加到Eclipse面板中的类路径,我可以按预期编译代码。我相信现代ants命令行中的“-lib foo.jar”也可以提供相同的功能
现在,我想从build.xml中指定我希望类路径上的ecj-3.5.jar满足上述要求。我们已经可以用ant任务来实现这一点,所以我相信这是可能的
所以问题是:我如何添加到javac使用的类路径中,以便仅从build.xml中定位编译器
看来即将到来的Ant4Eclipse1.0包含了Eclipse编译器(这正是我想要使用它的原因),因此通过升级到该编译器(从0.5)应该可以解决我们的问题
2010年9月24日:Ant4Eclipse仍处于M4,没有发布时间的指示
2011年12月1日:我们现在已经从ant迁移到maven。xml脚本遇到了复杂性问题,需要一种新的方法。任何需要选择做什么的人——除了一些琐碎的项目外,不要选择ant4eclipse路径
2012年11月30日:一年后,maven的体验仍然很好。心态上有很多怪癖和变化,但大多数在上下文中是有意义的。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的compiler属性,然后为javac指定compilerclasspath。这是一个普通的类路径结构,用于保存类路径以加载编译器适配器
<javac compiler="org.eclipse.jdt.core.JDTCompilerAdapter" ....>
<compilerclasspath>
...
</compilerclasspath>
</javac>
...
有关更多详细信息,请参阅Ant手册中的文档。请注意,这两种解决方案仅适用于Ant 1.8以后的版本。阅读。我认为您可以编写一个简单的包装器来正确设置类路径,并将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>
我认为您甚至可以重用相同的构建文件,只需将不同的目标作为入口点。对于Eclipse 3.5(可能是1.7)附带的ant,我会遇到“问题:无法创建任务或类型componentdef”。另一个错误消息是与ant 1.8相关的类路径,但我真的很欣赏从Eclipse内部工作的解决方案。我为ant 1.8添加了另一个选项,但不知道如何使用1.7。您建议使用修改过的类路径重新启动ant。我真的会避免重新启动步骤。