0

我正在使用 Apache Ant 为学校编译、jar 和运行一个 java 项目。我遇到了一个问题,我不知道如何将单个 .txt 文件包含到我的 .jar 中,然后在我的 java 代码中也引用它。

这是我的 build.xml 中的编译和 jar 命令。

    <target name="compile">
        <mkdir dir="build/classes"/>
        <javac srcdir="src" destdir="build/classes"/>
    </target>
    <target name="jar">
        <mkdir dir="build/jar"/>
        <jar destfile="build/jar/BinaryTree.jar" basedir="build/classes">
            <manifest>
                <attribute name="Main-Class" value="cs3345.MainLauncher"/>
            </manifest>
        </jar>
    </target>

我使用什么命令将 .txt 文件包含到我的 jar 中。我已经看过一些关于它的 Stack Overflow 问题,特别是

使用 Ant 将非代码资源添加到 jar 文件

如何使用 Ant 在 jar 中包含数据文本文件?

但他们都没有真正解释如何包含文件。他们只是有一些对我来说没有意义的命令。我试过了,

        <jar destfile="build/jar/BinaryTree.jar" basedir="build/classes">
            <manifest>
                <attribute name="Main-Class" value="cs3345.MainLauncher"/>
            </manifest>
            <fileset dir="src/resources" />
        </jar>

但这似乎没有帮助,因为我只是不了解 Ant,我找不到它的文档来解释为什么你在 ant 中做不同的事情。

我的 .txt 文件位于 src/resources 中。

4

3 回答 3

2

<jar>任务任务多个文件集:

<jar destfile="build/jar/BinaryTree.jar" basedir="build/classes">
    <manifest>
        <attribute name="Main-Class" value="cs3345.MainLauncher"/>
    </manifest>
    <fileset dir="src/resources" />
</jar>

任务是一个<manifest>子实体。这非常像<manifest>任务。在您的 jar 中是一个名为的文件META-INF/MANIFEST.MF,这是向该 jar 添加另一个属性。这个特定的属性告诉 Jar 执行 jar 时应该启动的主类是什么。

<fileset dir="src/resources"/> is adding all the files that are found in the资源目录。如果您只想添加特定文件怎么办?您可以使用选择器。例如:

<jar destfile="build/jar/BinaryTree.jar" basedir="build/classes">
    <manifest>
        <attribute name="Main-Class" value="cs3345.MainLauncher"/>
    </manifest>
    <fileset dir="src/resources">
        <include name="foo.txt"/>
    </fileset>
</jar>

这次我没有添加整个resources目录树。我只是foo.txt在我的 jar 文件中添加一个名为的文件。

于 2013-10-14T21:14:38.887 回答
1

使用<copy>

<target name="copy" depends="blablabla" description="Copies additional files">
    <echo>Start Copying Files</echo>
    <copy file="./src/resources/a.txt" overwrite="true" todir="build/classes/"/>

    <echo>End Copying Files</echo>
</target>

作为旁注

如果我们想在src文件夹下包含一些文件,我们可以写target如下:


于 2013-10-14T20:31:27.557 回答
1

文档中没有任何内容说“您只能添加 .class 文件”。fileset标签应该可以工作。也许它把文件放在你不看的地方。以详细模式运行以了解它对 .txt 文件的作用。要控制目的地,您应该使用zipfileset标签。


但这似乎没有帮助。我的 .txt 文件位于 src/resources 中。

你将不得不详细说明这一点。怎么没有帮助?问题是文件嵌套在 zip 下还是没有进入那里,或者您遇到错误?

于 2013-10-14T20:36:19.657 回答