Ant exclude 不排除目录
Ant exclude does not exclude directory
我想将一些特定的库打包成一个包。因此,我想执行以下 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
如"dist"任务所示,只有
中的库
bin/java/lang/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}"
include name="java/lang/invoke/*.*"
exclude name="com/** javax/** org/** sun/**"
</jar>
</target>
您的 excludes 似乎不起作用而 faljbour 的答案起作用的原因是嵌套的 exclude
元素起作用,而 excludes
属性以不同的方式起作用。该属性以逗号或空格分隔其值,因此您可以指定多个。该元素没有——毕竟您可能想要指定一个包含空格的模式。所以你得到一个 "com/** javax/** org/** sun/**" 的单一模式,它肯定不匹配任何东西。
<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/**
。
我想将一些特定的库打包成一个包。因此,我想执行以下 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
如"dist"任务所示,只有
中的库bin/java/lang/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}"
include name="java/lang/invoke/*.*"
exclude name="com/** javax/** org/** sun/**"
</jar>
</target>
您的 excludes 似乎不起作用而 faljbour 的答案起作用的原因是嵌套的 exclude
元素起作用,而 excludes
属性以不同的方式起作用。该属性以逗号或空格分隔其值,因此您可以指定多个。该元素没有——毕竟您可能想要指定一个包含空格的模式。所以你得到一个 "com/** javax/** org/** sun/**" 的单一模式,它肯定不匹配任何东西。
<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/**
。