フォルダーから特定のファイルのみを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 が見つからないというエラーが表示されます。