如何在运行Ant的jar任务时挑选包?

时间:2014-07-15 12:58:09

标签: java ant jar

我正在编译(javac)我的Java源文件到gen/bin,如下所示:

myproject/
    src/
        (all my source code)
    gen/bin/
        com.me.myorg.fizz.*
        com.me.myorg.buzz.*
        com.me.myorg.foo.*
        com.me.myorg.bar.*

恰好在每个顶级包(fizz,buzz,foo,bar)之间存在(0)依赖关系; foo中的任何内容都没有foo之外的依赖关系

我想从此设置中创建4个不同的JAR文件:

  • fizz.jar
  • buzz.jar
  • foo.jar
  • bar.jar

这意味着我的<jar>目标中需要执行4 jar-all个任务,如下所示:

<target name="jar-all">
    <jar destfile="gen/dist/fizz.jar">
        <fileset dir="gen/bin" includes="???" />    --> How do I specify **only** com.me.myorg.fizz.* classes ???
    </jar>

    <!-- 3 other nearly-identical JAR tasks... -->
</target>

我如何选择樱桃采摘哪些包放在每个罐子里?显然,我想要以下的包/ jar实现:

com.me.myorg.fizz.* --> fizz.jar
com.me.myorg.buzz.* --> buzz.jar
com.me.myorg.foo.*  --> foo.jar
com.me.myorg.bar.*  --> bar.jar

想法?

1 个答案:

答案 0 :(得分:2)

只需在与完全限定的包名对应的路径下包含类文件的路径:

<jar destfile="gen/dist/fizz.jar">
    <fileset dir="gen/bin" includes="com/me/myorg/fizz/**/*.class" />
</jar>

<jar destfile="gen/dist/buzz.jar">
    <fileset dir="gen/bin" includes="com/me/myorg/buzz/**/*.class" />
</jar>

<jar destfile="gen/dist/foo.jar">
    <fileset dir="gen/bin" includes="com/me/myorg/foo/**/*.class" />
</jar>

<jar destfile="gen/dist/bar.jar">
    <fileset dir="gen/bin" includes="com/me/myorg/bar/**/*.class" />
</jar>

**/*.class表示所有类文件,包括子目录中的文件(如果有的话)。