代码之家  ›  专栏  ›  技术社区  ›  Laurence Gonsalves

如何在ant中排除javac任务中的源代码?

  •  15
  • Laurence Gonsalves  · 技术社区  · 14 年前

    我的build.xml中包含以下内容:

    <target name="compile.baz" depends="init">
       <javac destdir="${build.dir}/classes" debug="on">
          <compilerarg value="-Xlint:deprecation"/>
          <src>
             <pathelement location="${src.dir}/com/foo/bar/baz/" />
             <pathelement location="${src.dir}/com/foo/bar/quux/" />
             <!-- Need to exclude ${src.dir}/com/foo/bar/quux/dontwant/ -->
          </src>
          <classpath refid="classpath.jars" />
       </javac>
       ...
    </target>
    

    这主要是做我想要的,除了(如评论所说)我做的 想把文件放进去吗
    ${src.dir}/com/foo/bar/quux/dontwant/ 由这个任务编译(但我确实想要 其他一切 在下面 ${src.dir}/com/foo/bar/quux/ 将在此任务中编译)。

    我是个彻头彻尾的antn00b,文档对我帮助不大。我看到有几个地方说有各种排除/排除元素/属性,但我能想到的每一个变化要么没有效果,要么导致类似“的错误” 废话 不支持“exclude”属性。

    6 回复  |  直到 10 年前
        1
  •  18
  •   M A    10 年前

    有几个人建议使用 <exclude> . 这与我指定任务的方式不符。垃圾神的答案与 the sixth example on this page 这让我想到了如何重构我的任务规范。

    <pathelement> a中的元素 <src> ,如下所示:

    <src>
       <pathelement location="${src.dir}/com/foo/bar/baz/" />
       <pathelement location="${src.dir}/com/foo/bar/quux/" />
    </src>
    

    我改用单人床 <src> 先是一条路,然后是一套 <include>

    <src path="${src.dir}" />
    <include name="com/foo/bar/baz/**" />
    <include name="com/foo/bar/quux/**" />
    

    这看起来在功能上是相同的,但是与 < :

    <exclude name="${src.dir}/com/foo/bar/quux/dontwant/**"/>
    

    (事实上,我很惊讶原来的东西居然能奏效。)

        2
  •  11
  •   May Bogus    11 年前

    根据我的实验,你不应该包括你想要排除的文件的完整路径。

    <javac>
    (...>
       <exclude name="${src.dir}/com/foo/blah/blah1/FILENAME.java"/>
    (...)
    </javac>
    

    但这一个是:

    <javac>
    (...>
       <exclude name="com/foo/blah/blah1/FILENAME.java"/>
    (...)
    </javac>
    
        3
  •  6
  •   trashgod    14 年前

    剩下的我不确定,但是 <exclude/> 嵌套元素应该在 Javac 任务。见第六条 example 趴下。

    ** 符号,在中讨论 Directory-based Tasks

    <target name="compile.baz" depends="init">
        <javac destdir="${build.dir}/classes" debug="on">
            <compilerarg value="-Xlint:deprecation"/>
            <src>
                <pathelement location="${src.dir}/com/foo/bar/baz/" />
                <pathelement location="${src.dir}/com/foo/bar/quux/" />
            </src>
            <exclude name="${src.dir}/com/foo/bar/quux/dontwant/**"/>
            ...
        </javac>
        ...
    </target>
    
        4
  •  5
  •   matiasf    14 年前

    尝试

    <javac>
    (...>
    <exclude name="${src.dir}/com/foo/bar/quux/dontwant/*" />
    (...)
    </javac>
    
        5
  •  4
  •   Giles    11 年前

    如果您试图排除Java类,但Ant仍在尝试编译它们,那么这可能是由于代码中引用了这些类。

    如果A.java引用了B.java,并且您试图排除B.java,那么编译A.java将需要编译B.java。

        6
  •  4
  •   M A    10 年前

    尝试 文件夹“test”位于 {source.dir} 不会遵守的

    <javac destdir="${compile.dir}"  ...>
       <src path="${source.dir}" />
       <exclude name="test/**"/>
    </javac>