Java 具有的文件集包含某些文件(但不是全部)的选择器
我试图在我的Ant构建中使用Java 具有的文件集包含某些文件(但不是全部)的选择器,java,jar,ant,build,fileset,Java,Jar,Ant,Build,Fileset,我试图在我的Ant构建中使用not和包含关键字来丢弃@WebService注释类。但是,它不起作用,仍然包含用@WebService注释的类。以下是用于将源复制到工作生成目录的任务: <copy todir="${compile.dir}"> <fileset dir="${src.dir}"> <include name="**/*" /> <exclude name="**/*.class" />
not
和包含关键字来丢弃@WebService
注释类。但是,它不起作用,仍然包含用@WebService
注释的类。以下是用于将源复制到工作生成目录的任务:
<copy todir="${compile.dir}">
<fileset dir="${src.dir}">
<include name="**/*" />
<exclude name="**/*.class" />
<exclude name="log4j.properties" />
<exclude name="log4j.properties.*" />
<exclude name="log4j.xml" />
<exclude name="log4j.xml.*" />
<exclude name="*.jocl" />
<not>
<contains text="@WebService(" casesensitive="true" />
</not>
</fileset>
</copy>
但是,not
部分似乎被忽略,这些类仍然被复制。为什么这不起作用?语法错了吗?另外,如何添加一个条件,以便限制只涉及.java
文件
我使用的是2015年7月8日编译的ApacheAnt(TM)1.9.6版(也许这会对您有所帮助,它对我很有用,但我不确定我是否完全理解您的要求。)
请尝试以下文件集:
<fileset dir="${src.dir}">
<exclude name="**/*.class" />
<exclude name="log4j.properties" />
<exclude name="log4j.properties.*" />
<exclude name="log4j.xml" />
<exclude name="log4j.xml.*" />
<exclude name="*.jocl" />
<or>
<filename name="**/*.java" negate="yes" />
<not>
<contains text="@WebService(" casesensitive="true" />
</not>
</or>
</fileset>
一些解释性意见:
无需指定
,这在文件集中是隐式的
当您在文件集中包含嵌套的时(如…
),这将与模式集隐式AND(它们彼此隐式OR)。见文件:
选择器在文件集中作为嵌套元素提供。如果有的话
在文件集中的选择器中,如果不选择文件,则
不被视为文件集的一部分。这使得文件集等效
到
选择器容器
这样做的结果是,您需要使用带有两个负选择器的选择器容器。换句话说,“如果文件不是java文件或与文本字符串不匹配,请选择该文件”
如果您愿意,选择器容器可以等效地这样编写:
<or>
<not>
<filename name="**/*.java" />
</not>
<not>
<contains text="@WebService(" casesensitive="true" />
</not>
</or>
每次运行前${compile.dir}
是否为空<代码>
将仅对其认为需要复制的任何文件执行操作,它不会删除在上一次运行中复制的文件。它不是。我真蠢,指望你能干净利落