【问题标题】:Ant script exclude folder except some files蚂蚁脚本排除文件夹,除了一些文件
【发布时间】:2015-08-30 03:27:15
【问题描述】:

我想编写 Ant 脚本,排除除某些文件之外的整个文件夹。

我有一个文件夹,其中包含数千个 Java 文件。现在我想排除那个文件夹,我想在其中包含两个 Java 文件。我该怎么做?

下面的代码对我不起作用。

<target  name="compile" >
    <javac srcdir="src" destdir="./classes"
        <exclude name="com/corporate/modes/**"/>
        <include name="com/corporate/modes/UpdatePersonalDetail.java"/>

【问题讨论】:

  • 模式覆盖所有 模式。只需 您需要的确切文件,不要提供 .

标签: java ant


【解决方案1】:

要在您的javac 编译任务中仅包含某个文件夹中的特定文件,请使用&lt;include&gt; 元素指定这些文件。当指定&lt;include&gt; 元素时,编译中将只包含命名文件(及其项目依赖项)。

示例项目

项目目录: /home/project
源目录: /home/project/src
构建目录: /主页/项目/构建


build.xml(位于/home/project)

<?xml version="1.0" encoding="UTF-8"?>
<project name="compile_test" basedir="." default="compile_class1">

  <property name="src.dir" value="${basedir}/src" />
  <property name="build.dir" location="${basedir}/build" />
  <property name="classes.dir" location="${build.dir}/classes" />

  <target name="init" description="Initialize the build directory.">
    <mkdir dir="${build.dir}" />
    <mkdir dir="${classes.dir}" />
  </target>

  <target name="clean" description="Delete all files created by this script.">
    <delete dir="${build.dir}" />
  </target>

  <target name="compile_class1" depends="init">
    <javac srcdir="${src.dir}" destdir="${classes.dir}"
        includeantruntime="false">
      <include name="com/mypackage/Class1.java" />
    </javac>
  </target>

  <target name="compile_class2" depends="init">
    <javac srcdir="${src.dir}" destdir="${classes.dir}"
        includeantruntime="false">
      <include name="com/mypackage/Class2.java" />
    </javac>
  </target>
</project>

Java 源文件

Class1.java

package com.mypackage;

public class Class1 {
  public static void main(String[] args){
    System.out.println("Class1");
  }
}

Class2.java

package com.mypackage;

public class Class2 {
  public static void main(String[] args){
    Class3 class3 = new Class3();
    System.out.println(class3.getMessage());
  }
}

Class3.java

package com.mypackage;

public class Class3 {
  public String getMessage() {
    return "The answer is 42.";
  }
}

蚂蚁输出

Ant 目标 compile_class1

$ ant clean compile_class1

Buildfile: /home/project/build.xml

clean:
   [delete] Deleting directory /home/project/build

init:
    [mkdir] Created dir: /home/project/build
    [mkdir] Created dir: /home/project/build/classes

compile_class1:
    [javac] Compiling 1 source file to /home/project/build/classes

BUILD SUCCESSFUL
Total time: 1 second

请注意,虽然有三个 Java 源文件,但只有 &lt;include&gt; 元素指定的文件被编译。


Ant 目标 compile_class2

$ ant clean compile_class2

Buildfile: /home/project/build.xml

clean:
   [delete] Deleting directory /home/project/build

init:
    [mkdir] Created dir: /home/project/build
    [mkdir] Created dir: /home/project/build/classes

compile_class2:
    [javac] Compiling 1 source file to /home/project/build/classes

BUILD SUCCESSFUL
Total time: 1 second

在这种情况下,虽然 Ant 目标 compile_class2 只在嵌套的 &lt;include&gt; 元素中指定了一个文件,但 Class2.java 和 Class3.java 都被编译了,因为 Class2.java 依赖于 Class3.java。如果编译时没有包含 Class2.java 的依赖项,那么在尝试执行 Class2 时,会收到无法定位 com.mypackage.Class3 的错误。

【讨论】:

  • 我想排除除一个文件外的整个文件夹,如何实现?
  • 通过使用&lt;include&gt; 元素指定一个(或多个文件),您表示应该只编译该文件(及其依赖项)。所有其他文件和目录都被自动排除(因此,您排除了除指定文件之外的整个文件夹)。
  • 但是我只想获取该文件夹中的一个文件并排除其他文件是什么?
  • 答案已更新以提供完整的项目示例,说明当使用嵌套的 &lt;include&gt; 元素指定文件时,只会编译该文件(及其项目依赖项)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多