ファイルのリストをソースディレクトリから宛先ディレクトリにコピーしています。コピーする前に、重複するファイル名を確認する必要があります。
ありがとう..
ただ疑問に思う、これで十分でしょうか?
<copy todir="../new/dir" overwrite="false" verbose="true">
<fileset dir="src_dir"/>
</copy>
マニュアルにあるように(http://ant.apache.org/manual/Tasks/copy.html):
verbose-コピーされているファイルをログに記録します。
上書き-宛先ファイルが新しい場合でも、既存のファイルを上書きします。
これは労力の少ないソリューションになるためです。そうでなければ、あなたはあなた自身のアリのタスクを作成する必要があると思います。
アップデート:
OK、それで私はantコピータスクのソースをチェックしました、そしてあなたがあなたのサブクラス(新しいantタスク)でそれを拡張することによってあなたが必要なことをすることができると私は信じます。私が想定しているように、1つだけではなく、複数のファイルのコピーを実行しています。
したがって、次のことを行う必要があります。
org.apache.tools.ant.taskdefs.Copy
実際にファイル(および場合によっては空のディレクトリ)がコピーされます。これは、サブクラスをオーバーライドするのに適した方法です。
@Override
protected void doFileOperations() {
if (fileCopyMap.size() > 0) {
Enumeration e = fileCopyMap.keys();
while (e.hasMoreElements()) {
String fromFile = (String) e.nextElement();
String[] toFiles = (String[]) fileCopyMap.get(fromFile);
for (int i = 0; i < toFiles.length; i++) {
String toFile = toFiles[i];
if (fromFile.equals(toFile)) {
log("Skipping self-copy of " + fromFile, verbosity);
continue;
}
if (new File(toFile).exists) {
log ("Warning: dest file already exists");
}
}
}
...
super.doFileOperations();
}
より完全な実装は次のとおりです。
import java.io.File;
import java.io.IOException;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Copy;
public class CopyNonDuplicateTast extends Copy {
public CopyNonDuplicateTast() {
setOverwrite(true);
}
@Override
public void setOverwrite(boolean overwrite) {
super.setOverwrite(true);
}
@Override
protected void doFileOperations() {
Set<String> allToFiles = new HashSet<String>();
for (final Map.Entry<String, String[]> e : fileCopyMap.entrySet()) {
final String fromFile = e.getKey();
final String[] toFiles = e.getValue();
for (int i = 0; i < toFiles.length; i++) {
final String toFile = toFiles[i];
if (fromFile.equals(toFile)) {
continue;
}
File destFile = new File(toFile);
if ((destFile.exists() && destFile.isFile()) || allToFiles.contains(toFile)) {
String msg = "Destination file \"" + toFile + "\" exists";
IOException ex = new IOException(msg);
if (failonerror) {
throw new BuildException(msg, ex, getLocation());
}
log(msg, Project.MSG_ERR);
}
allToFiles.add(toFile);
}
}
super.doFileOperations();
}
}
この実装では、同じコピータスク内の2つのファイルセットが失敗する可能性があります。
<copyNonDuplicate todir="${deployment.dir}/languageFiles">
<fileset dir="../MyComponent1/src">
<include name="**/*.properties" />
</fileset>
<fileset dir="../MyComponent2/src">
<include name="**/*.properties" />
</fileset>
</copyNonDuplicate>