ANT创建jarfile

时间:2018-01-16 20:33:13

标签: java jar ant

我想使用ant构建一个jar文件。 我的项目中有一个资源文件夹,下面有文件和文件夹。 例如:

Package---
             src
                    Main.java
             resources
                    images
                           logo.png

在JAR文件中,图像可以通过...File("resources/images/logo.png");访问,这是可能的,如果可以,如何?

我尝试了几个选项,但无法弄清楚它是如何工作的。 我的一次尝试:

...    
<zipfileset dir="${dir.buildfile}/ressources/images" includes="*.png"/>
<zipfileset dir="${dir.buildfile}/ressources/images" includes="*.jpg"/>
...

这不起作用......

祝你好运!

1 个答案:

答案 0 :(得分:1)

这是一个简单的例子。我们假设您有以下目录结构:

./Test.java
./Test.class
./resources/test.txt

您的源文件访问文件resources/test.txt,如下所示:

import java.io.*;
import java.net.*;

public class Test {
    public void test() throws IOException, URISyntaxException {
        URL url = getClass().getResource("/resources/test.txt");

        try (BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()))) {
            for (String line; (line = br.readLine()) != null;) {
                System.out.println("> " + line);
            }
        }
    }

    public static void main(String[] args) throws Exception {
        Test test = new Test();
        test.test();
    }
}

然后,以下ANT目标将创建一个包含.class文件和resources目录的jar文件:

<target name="jar">
  <jar destfile="test.jar">  
    <fileset dir="." includes="Test.class"/>
    <fileset dir="." includes="resources/**"/>
  </jar>
</target>

您可以通过运行验证:

java -cp test.jar Test

应该注意两件事:

  1. /来电路径开头的getClass().getResource(...)。这很重要,因为否则类的包名称将被添加到给定路径(尽管在上面的示例中,Test.java没有包声明)。
  2. &#39; / **&#39;部分在ANT任务的第二个文件集中。没有它,只有目录本身(即没有任何包含的文件)被添加到你的jar文件中。