首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从_within_ build.xml中完全指定Eclipse编译器

从_within_ build.xml中完全指定Eclipse编译器
EN

Stack Overflow用户
提问于 2010-03-02 14:57:00
回答 2查看 4.2K关注 0票数 8

作为一个实验,我们希望使用Eclipse编译器(从eclipse.org下载的ECJ-3.5.jar)在运行时版本的Java6(而不是JDK )上构建我们的产品,据我了解,这是一个将这个jar添加到ant类路径,并将build.compiler属性设置为指向适配器的问题。

通过包括

代码语言:javascript
复制
<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工作得很好。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-02 15:17:58

一种方法是在使用javac时指定对组件One的引用。

代码语言:javascript
复制
<componentdef name="ecj" 
              classname="org.eclipse.jdt.core.JDTCompilerAdapter" 
              classpath="ecj-3.7.1.jar" />

<javac ....>
  <ecj/>
</javac>

另一种选择是为javac设置build.compiler或编译器属性,然后为javac指定编译器compilerclasspath。这是一个类似于普通路径的结构,用于保存用于加载编译器适配器的类路径。

代码语言:javascript
复制
<javac compiler="org.eclipse.jdt.core.JDTCompilerAdapter" ....>
  <compilerclasspath>
     ...
  </compilerclasspath>
</javac>

有关更多细节,请参阅Ant手册中的javac任务文档。请注意,这两种解决方案都只能从Ant 1.8开始工作。

票数 12
EN

Stack Overflow用户

发布于 2010-03-03 17:29:49

阅读通过Java运行Ant。我认为您可以编写一个简单的包装器,它将正确设置类路径并将jar文件添加到生成的类路径中。

这里,我只是从上面的链接中剪切和粘贴示例,并添加了您感兴趣的库到类路径中:

代码语言:javascript
复制
<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>

我认为您甚至可以重用同一个构建文件,只需给出一个不同的目标作为入口点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2364006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档