【发布时间】:2012-09-24 07:53:49
【问题描述】:
得到以下 build.xml 字符串:
<jar destfile="${lib.dir}/rpt.jar" basedir="${classes.src}" excludes="**/*.java" />
我是 Ant 新手,我不明白 excludes 字符串是如何工作的。哪些文件受到影响?所有java源文件?
谢谢。
【问题讨论】:
得到以下 build.xml 字符串:
<jar destfile="${lib.dir}/rpt.jar" basedir="${classes.src}" excludes="**/*.java" />
我是 Ant 新手,我不明白 excludes 字符串是如何工作的。哪些文件受到影响?所有java源文件?
谢谢。
【问题讨论】:
首先关于声明
<jar destfile="${lib.dir}/rpt.jar" basedir="${classes.src}" excludes="**/*.java" />
此目标用于将文件打包到 jar 存档中
destfile : 指定目标文件的名称和位置,将被创建的存档
basedir :指定需要打包的文件的基本目录。请注意,将包含所有文件和子文件夹
excludes : 这用于从 basedir 中排除您在包 (jar) 中不需要的文件
现在回答你的问题
上述语句的作用是将 classes.src 中的所有文件打包到 $(lib.dir)/rpt.jar 中,但会排除在 basedir 的任何子文件夹中或内部找到的任何 .java 文件。
编辑: 此 exclude="*/.java" 通常用于从 jar 中排除源代码,这些源代码将被使用、分发、导出等
【讨论】:
是的,您的代码排除了所有 Java 文件。 看看模式定义:This page 很好地解释了 Ant 模式是如何工作的。它还包含许多说明它的示例。模式无处不在,所以如果你继续使用 Ant,你真的需要了解它们。
** 基本上表示每个子目录。而/*.java 表示这些目录中的每个 Java 文件。
【讨论】:
<jar destfile="${lib.dir}/rpt.jar" basedir="${classes.src}" excludes="**/*.java" />
等价于
<jar destfile="${lib.dir}/rpt.jar">
<fileset dir="${classes.src}" excludes="**/*.java" />
</jar>
即它包括来自${classes.src} 目录及其子目录的所有文件,但以.java 结尾的文件除外(以及default excludes 除外)
【讨论】: