Ant排除不排除目录

时间:2015-03-11 00:14:43

标签: java ant

我想将一些特定的库打包到一个包中。因此,我想在ant任务下面:

 <property name="src" location="src"/>
  <property name="build" location="bin"/>
  <property name="target"  location="c:\\temp\\invoke.jar"/>
 <target name="dist" depends="compile"
        description="generate the distribution" >
    <echo message="Start jar java.lang.invoke package.."/>
    <delete file="${target}" />
    <jar destfile="${target}" basedir="${build}">
        <fileset dir="${build}/">
            <include name="java/lang/invoke/*.*" />
            <exclude name="com/** javax/** org/** sun/**" />
      </fileset>
    </jar>
  </target>

目录结构是

c:\....\J9 JCL>dir bin
 Directory of C:\...\J9 JCL\bin

03/10/2015  05:42 PM    <DIR>          com
03/10/2015  05:42 PM    <DIR>          java
03/10/2015  05:42 PM    <DIR>          javax
07/20/2014  06:44 PM             2,173 notices.txt
03/10/2015  05:42 PM    <DIR>          org
07/20/2014  06:44 PM             1,056 rcm.xsd
03/10/2015  05:42 PM    <DIR>          sun
07/20/2014  06:44 PM               230 tags.properties

&#34; dist&#34;任务,只有

中的库
  

仓/爪哇/郎/调用

jar任务需要

。但是在运行之后,似乎包含和排除都不起作用。我的剧本有什么问题吗?

2 个答案:

答案 0 :(得分:1)

你排除他人的原因似乎不起作用,并且faljbour的回答是,嵌套的exclude元素有效,excludes属性以不同的方式工作。该属性将其值分隔为逗号或空格,以便您可以指定其中的多个。元素没有 - 毕竟你可能想要指定一个包含空格的模式。所以你得到一个单一的模式&#34; com / ** javax / ** org / ** sun / **&#34;这肯定不匹配任何东西。

<jar destfile="${target}" basedir="${build}">
    <fileset dir="${build}"
        includes="java/lang/invoke/*.*"
        excludes="com/** javax/** org/** sun/**" />
  </fileset>
</jar>

<jar destfile="${target}" basedir="${build}">
    <fileset dir="${build}/">
        <include name="java/lang/invoke/*.*" />
        <exclude name="com/**"/>
        <exclude name="javax/**"/>
        <exclude name="org/**"/>
        <exclude name="sun/**" />
  </fileset>
</jar>

机器人会以同样的方式工作。顺便说一句,您可以不使用**,因为Ant会自动将模式foo/转换为foo/**

答案 1 :(得分:0)

试试这个,只需更改目标部分并删除文件集

<target name="dist" depends="compile"
        description="generate the distribution" >
    <echo message="Start jar java.lang.invoke package.."/>
    <delete file="${target}" />
    <jar destfile="${target}" 
         basedir="${build}"
         include name="java/lang/invoke/*.*" 
         exclude name="com/** javax/** org/** sun/**"
    </jar>
</target>