【问题标题】:Apache Ant: adding and using a .txt fileApache Ant:添加和使用 .txt 文件
【发布时间】:2013-10-22 12:18:59
【问题描述】:

我正在使用 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 问题,特别是

adding non-code resources to jar file using Ant

How can I include data text files in a jar using Ant?

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

        <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 中。

【问题讨论】:

    标签: java ant jar


    【解决方案1】:

    使用&lt;copy&gt;:

    <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下面写:


    【讨论】:

    • 那么我是否需要使用、ant compile、ant copy、ant jar、Commands 才能将所有内容放在正确的位置?
    • 一般你清理->复制文件->编译->创建jar文件。最后一步,如果您对在服务器端使用 JNLP 感兴趣,可以对它们进行签名
    【解决方案2】:

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


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

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

    【讨论】:

    • 什么是详细模式?我对 Ant 的工作原理一无所知,所以我不太了解它为什么不工作。
    • ant --help: -verbose, -v be extra verbose
    • @MorganK 在构建过程中调试蚂蚁。它将打印出所有步骤和错误
    【解决方案3】:

    &lt;jar&gt; 任务任务多个文件集:

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

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

    &lt;fileset dir="src/resources"/&gt; is adding all the files that are found in theresources` 目录。如果您只想添加特定文件怎么办?您可以使用selectors。例如:

    <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 文件中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-24
      • 2021-03-25
      • 2017-08-02
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多