1

一部のファイルを除く完全なフォルダーを除外するAntスクリプトを作成したいと考えています。

何千もの Java ファイルが置かれているフォルダーが 1 つあります。ここで、そのフォルダーを除外し、そこから 2 つの Java ファイルを含めたいと考えています。どうやってやるの?

以下のコードは私にとってはうまくいきません。

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

1 に答える 1

1

フォルダーから特定のファイルのみをjavacコンパイル タスクに含めるには、<include>要素を使用してファイルを指定します。要素が指定される<include>と、指定されたファイル (およびそのプロジェクトの依存関係) のみがコンパイルに含まれます。

サンプルプロジェクト

プロジェクト ディレクトリ: /home/project
ソース ディレクトリ: /home/project/src
ビルド ディレクトリ: /home/project/build


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

3 つの Java ソース ファイルがありましたが、要素によって指定されたファイルのみ<include>がコンパイルされたことに注意してください。


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はネストされた要素で 1 つのファイルのみを指定しました<include>が、Class2.java は Class3.java に依存しているため、Class2.java と Class3.java の両方がコンパイルされました。Class2.java の依存関係がコンパイルに含まれていない場合、Class2 を実行しようとすると、com.mypackage.Class3 が見つからないというエラーが表示されます。

于 2012-07-25T15:27:48.857 に答える