Ant/Task のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Ant/Task へ行く。
- 1 (2007-06-28 (木) 14:39:02)
- 2 (2011-01-14 (金) 17:15:08)
- 3 (2011-06-02 (木) 14:27:25)
- 4 (2013-10-30 (水) 21:51:45)
- 5 (2014-09-02 (火) 16:21:10)
- 6 (2014-11-08 (土) 01:41:12)
- 7 (2015-09-29 (火) 19:51:04)
- 8 (2017-10-27 (金) 16:26:13)
- 9 (2018-10-30 (火) 16:49:51)
- 10 (2019-10-02 (水) 13:48:53)
- 11 (2025-01-03 (金) 08:57:02)
- 12 (2025-01-03 (金) 09:01:23)
- 13 (2025-01-03 (金) 09:02:38)
- 14 (2025-01-03 (金) 09:03:21)
- 15 (2025-01-03 (金) 09:04:02)
TITLE:AntのTaskを自作
AntのTaskを自作
編集者:Terai Atsuhiro
作成日:
更新日:2019-10-02 (水) 13:50:15
概要
AntのTaskを自作し、これを利用する方法をテストします。
サンプルコード
import org.apache.tools.ant.*; import java.io.*; import java.util.*;
public class MoveImportDirTask extends Task{
private File m_sourceDirectory; private File m_destinationDirectory; public MoveImportDirTask(){}
public void setSrc(File sourceDir){ m_sourceDirectory = sourceDir; }
public void setDest(File destinationDirectory){ m_destinationDirectory = destinationDirectory; }
private void recursive(File dir, final Vector list){ String[] contents = dir.list(); for(int i=0;i<contents.length;i++){ File sdir = new File(dir, contents[i]); if(sdir.isDirectory()) { recursive(sdir, list); }else{ if(sdir.getName().endsWith(".java")) list.add(sdir); } } }
public void execute() throws BuildException{ if(m_sourceDirectory==null || !m_sourceDirectory.exists()){ throw new BuildException("Source directory not found (src attribute): "+m_sourceDirectory); } if(m_destinationDirectory==null){ throw new BuildException("Destination directory not set (dest attribute)"); } m_destinationDirectory.mkdirs();
int directoriesCreated = 0; int filesCopied = 0; try{ Vector list = new Vector(); recursive(m_sourceDirectory, list); Enumeration entries = list.elements(); // Look at all the entries in the JAR while(entries.hasMoreElements()){ File srcFile = (File)entries.nextElement(); String packageName = null; BufferedReader in = new BufferedReader(new FileReader(srcFile)); while(in.ready()){ String s = in.readLine().trim(); if(s.startsWith("package")){ packageName = s.substring(7, s.lastIndexOf(";")).trim(); break; } } in.close(); if(packageName==null || packageName.length()<=0) continue; String dirName = packageName.replaceAll("\\.", "/"); File newDirectory = new File(m_destinationDirectory, dirName); //log(newDirectory.getAbsolutePath()); if(!newDirectory.exists() && newDirectory.getCanonicalPath()!=null){ newDirectory.mkdirs(); directoriesCreated++; }
String javaFileName = dirName + File.separator + srcFile.getName(); if(srcFile.exists()){ // If we can find the .java file, copy it File destFile = new File(m_destinationDirectory, javaFileName); FileInputStream fis = new FileInputStream(srcFile); FileOutputStream fos = new FileOutputStream(destFile); byte[] buffer = new byte[1024]; int i = 0; while((i=fis.read(buffer))!=-1){ fos.write(buffer,0,i); } fis.close(); fos.close(); filesCopied++; } } }catch(IOException e){ throw new BuildException("Problem loading JAR file - "+e.getMessage()); } log(directoriesCreated+" directories created, "+filesCopied+" files copied"); }
}
解説
上記のサンプルは、javaファイルをimportに対応するディレクトリに移動するプラグインです。何処かで(失念)拾ってきたサンプルを改造して作ったものです。マニュアルのDeveloping with Ant(Writing Your Own Task)なども参考にしてください。
生成されたjarファイルを%ANT_HOME%\libに置き、以下の要領でタスクを定義します。
<target name="move-import">
<taskdef name="MoveImportDir"
classname="jp.co.ant.misc.MoveImportDirTask"
classpath="importdir.jar" />
<MoveImportDir src="./src" dest="./src-clean" />
</target>