文件集包含一些文件的选择器,但不是全部

时间:2017-08-01 12:33:05

标签: java jar ant build fileset

我正在尝试使用bundle.js@WebService关键字在我的Ant版本中放弃not带注释的类。但是,它不起作用,仍然包含使用contains注释的类。以下是用于将源复制到工作构建目录的任务:

@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

1 个答案:

答案 0 :(得分:1)

(也许这会引导你,它对我有用,但我不太确定我是否完全理解你的要求。)

试试这个文件集:

<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>

一些解释性评论:

没有必要指定<include name="**/*" />这是隐含在文件集中的。

如果在文件集中包含嵌套的selector(如<not>...<contains>...</not>),则会与模式集(它们彼此隐式OR运算)进行隐式AND运算。请参阅<fileset>文档:

  

选择器可用作FileSet中的嵌套元素。如果有的话   FileSet中的选择器不选择文件,即文件   不被视为FileSet的一部分。这使得FileSet等效   到<and>选择器容器。

这样做的结果是你需要使用带有两个负选择器的<or>选择器容器。换句话说,“选择文件,如果它是一个java文件,或者匹配文本字符串”

如果你愿意,可以用这种方式写出选择器容器:

<or>
  <not>
    <filename name="**/*.java" />
  </not>
  <not>
    <contains text="@WebService(" casesensitive="true" />
  </not>
</or>