Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在build.xml中完全从_指定Eclipse编译器_Java_Ant_Javac - Fatal编程技术网

Java 在build.xml中完全从_指定Eclipse编译器

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

作为一个实验,我们希望在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调用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。我真的会避免重新启动步骤。