1

我目前正在尝试使用 ant 编译一个项目,该项目使用许多作为 .class 文件分发的外部库(特别是 apache.hwpf 和 JDom2)。

我目前正在使用 eclipse 来编辑和构建项目,但我想切换到使用 ant 文件,因为它应该更易于维护(不需要特定版本的 eclipse),并且更易于构建(只需运行“ant build”或其他东西。

问题是,我不确定应该将库包含在 ant 文件中的哪个位置。我当前的 ant 文件(见下文)总是在 javac 阶段失败,所以我认为它应该在那里。这通常是因为它找不到像“元素”这样的东西,这是一个由 JDom2 库定义的类。

有人可以解释我应该在哪里导入它,以及如何导入。

(编辑:作为附录,我想要获得的功能类似于在 Eclipse 中的项目属性中的构建路径的库选项卡下添加一个类文件夹。这目前适用于构建我的项目,但我想移动如果可能的话,远离日食。)

(编辑:进一步澄清;我在 Eclipse 中通过 Project->Properties->Java Build Path->Libraries->Add Class Folder 做什么,我希望能够使用 ant。)

到目前为止,我的蚂蚁脚本是:

<project>
    <property name="src.dir" value="src"/>
    <property name="lib.dir" value="lib"/>
    <property name="build.dir" value="build"/>
    <property name="classes.dir" value="${build.dir}/classes"/>
    <property name="jar.dir" value="${build.dir}/jar"/>
    <property name="main-class" value="ba_cc.Main"/>

    <target name="clean">
        <delete dir="${build.dir}"/>
    </target>

    <target name="compile">
        <mkdir dir="${classes.dir}"/>
        <javac srcdir="${src.dir}" destdir="${classes.dir}"/>
    </target>

    <target name="jar">
        <mkdir dir="${jar.dir}"/>
        <jar destfile="${jar.dir}/Change_Checker.jar" basedir="${classes.dir}">
            <manifest>
                <attribute name="Main-Class" value="${main-class}"/>
            </manifest>
        </jar>
    </target>

    <target name="run">
        <java jar="${jar.dir}/Change_Checker.jar" fork="true"/>
    </target>

    <target name="clean-build" depends="clean,compile,jar"/>

    <target name="main" depends="clean,run"/>
</project>
4

1 回答 1

2

您的 ant 构建中的javac任务根本没有引用您的第三方类。要解决这个问题,您需要在类路径中专门引用它们。处理此问题的最佳方法是设置一个project.class.path属性,并使用任务的classpathorclasspathref属性引用该属性javac

这是一个例子project.class.path。我假设lib.dir将包含您的第三方 jar 或类:

<path id="project.class.path">
  <fileset dir="${lib.dir}"/>
  <pathelement location="${src.dir}"/>
  <pathelement location="${classes.dir}"/>
</path>

pathelement或者,您可以使用更多属性专门提供单个 jar 文件:

<path id="project.class.path">
  <pathelement location="${lib.dir}/JDom2.jar"/>
  <pathelement location="${lib.dir}/AnotherSupportLibrary.jar"/>
  ...

现在,在你的compile任务中:

<target name="compile">
    <mkdir dir="${classes.dir}"/>
    <javac srcdir="${src.dir}" destdir="${classes.dir}"
           classpath="${project.class.path}"/>
</target>

现在,您还需要在构建的 jar 中包含第三方库。该jar任务提供了将支持 jar 的内容合并到正在构建的 jar 中的规定,请参阅jar 任务文档中Merging Archives下的描述。

此外,您应该阅读文档并仔细查看javac 任务的示例,还应查看编写简单的构建文件,最后要设置更复杂的类路径,请查看基于目录的任务的文档。

于 2012-09-04T14:09:18.427 回答