让Ant的<javac>任务识别classpath

44

我有一个Apache Ant的构建文件,其中包含一个<javac>命令,需要将四个特定的JAR文件放在构建classpath中。我尝试过以下方法:

<project basedir=".." default="build_to_jar" name="Transnet Spectrum Analyzer">
    <property environment="env"/>
    <property name="src" value="src"/>
    <property name="libsrc" value="library_sources" />
    <property name="build" value="build"/>
    <property name="dist" value="dist"/>
    <property name="target" value="1.5"/>
    <property name="libraries" value="./libraries"/>

    <fileset dir="." id="TSA.classpath">
        <include name="${libraries}/rxtx/RXTXcomm.jar" />
        <include name="${libraries}/commons-logging-1.1.1.jar" />
        <include name="${libsrc}/JCommon/jcommon-1.0.15.jar" />
        <include name="${libsrc}/JFreeChart/jfreechart-1.0.12.jar" />
    </fileset>

    <target name="compile" depends="clean,init" description="compile the source " >

        <echo>Compile from ${src} to ${build}</echo>

        <javac destdir="${build}" source="${target}" target="${target}">
            <compilerarg value="-Xlint:unchecked"/>
            <src path="${src}"/>
            <classpath path="TSA.classpath" />
        </javac>
    </target>

    <!-- blah blah blah -->
</project>

...但是TSA.classpath中指定的文件似乎没有出现。我应该如何将这些文件包含在我的类路径中呢?

3个回答

74

这是我目前正在处理的一个项目中的示例。我猜想你可以修改它以适应你的情况。

<path id="master-classpath">
  <fileset dir="${web.dir}/WEB-INF/lib">
    <include name="*.jar"/>
  </fileset>

  <fileset dir="${appserver.lib}">
    <include name="servlet*.jar"/>
  </fileset>

  <pathelement path="${build.dir}"/>
</path>

...

<javac destdir="${build.dir}">
  <src path="${src.dir}"/>
  <classpath refid="master-classpath"/>
</javac>

我正在从XML文件中定义'<path id ='myID''>...</path>',然后使用'<ant antfile ="external.xml" target ="all" inheritall ="true">'调用另一个XML文件,该文件知道如何构建我的类。如果路径id在'external' XML中定义,则可以正常工作,但如果在调用XML中定义,则会出现错误。您知道这些是否可以在单独的XML中,并且如果可以,为什么会出现此错误? - Jeach

15
尝试
<javac ... classpathref="TSA.classpath">
或者
<javac ...>
    ...
    <classpath refid="TSA.classpath" />
</javac>

在阅读被评为最佳答案的那篇文章(由@William Brendel撰写)之后,阅读这篇文章是值得的。谢谢 :) - user1499731
仍然有至少三种不同的方法可以在Ant中完成这个任务,但是越多越好,对吧?(第三种方法是在javac中包含完全限定的类路径,第四种方法是创建一个部分类路径,部分引用另一个类路径...等等。) - user1499731
只是澄清一下,第二个不起作用,至少在 TSA.classpath<fileset> 的情况下。 - StockB

14

试一下这个:

 <classpath refid="TSA.classpath"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接