Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有的文件集包含某些文件(但不是全部)的选择器_Java_Jar_Ant_Build_Fileset - Fatal编程技术网

Java 具有的文件集包含某些文件(但不是全部)的选择器

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

我试图在我的Ant构建中使用
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}
是否为空<代码>
将仅对其认为需要复制的任何文件执行操作,它不会删除在上一次运行中复制的文件。它不是。我真蠢,指望你能干净利落