TITLE:AntのTaskを自作

AntのTaskを自作

#adsense2

編集者:Terai Atsuhiro~

作成日:2003-09-25
更新日:2019-10-02 (水) 13:50:15

概要

AntTaskを自作し、これを利用する方法をテストします。

概要

AntのTaskを自作し、これを利用する方法をテストします。

サンプルコード

サンプルコード

#spandel
import org.apache.tools.ant.*;
#spanend
import java.io.*;
import java.util.*;
#spanadd
import org.apache.tools.ant.*;
#spanend

#spandel
public class MoveImportDirTask extends Task{
#spanend
#spanadd
public class MoveImportDirTask extends Task {
#spanend
  private File m_sourceDirectory;
  private File m_destinationDirectory;
  public MoveImportDirTask(){}
  public MoveImportDirTask() {}

  public void setSrc(File sourceDir){
  public void setSrc(File sourceDir) {
    m_sourceDirectory = sourceDir;
  }

  public void setDest(File destinationDirectory){
  public void setDest(File destinationDirectory) {
    m_destinationDirectory = destinationDirectory;
  }

  private void recursive(File dir, final Vector list){
  private void recursive(File dir, final Vector list) {
    String[] contents = dir.list();
    for(int i=0;i<contents.length;i++){
    for (int i = 0; i < contents.length; i++) {
      File sdir = new File(dir, contents[i]);
      if(sdir.isDirectory()) {
      if (sdir.isDirectory()) {
        recursive(sdir, list);
      }else{
        if(sdir.getName().endsWith(".java")) list.add(sdir);
      } 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);
  public void execute() throws BuildException {
    if (m_sourceDirectory == null || !m_sourceDirectory.exists()) {
      String msg = "Source directory not found (src attribute): " + m_sourceDirectory;
      throw new BuildException(msg);
    }
    if(m_destinationDirectory==null){
    if (m_destinationDirectory == null) {
      throw new BuildException("Destination directory not set (dest attribute)");
    }
    m_destinationDirectory.mkdirs();

    int directoriesCreated = 0;
    int filesCopied = 0;
    try{
    try {
      Vector list = new Vector();
      recursive(m_sourceDirectory, list);
      Enumeration entries = list.elements();
      // Look at all the entries in the JAR
      while(entries.hasMoreElements()){
      while (entries.hasMoreElements()) {
        File srcFile = (File)entries.nextElement();
        String packageName = null;
        BufferedReader in = new BufferedReader(new FileReader(srcFile));
        while(in.ready()){
        while (in.ready()) {
          String s = in.readLine().trim();
          if(s.startsWith("package")){
          if (s.startsWith("package")) {
            packageName = s.substring(7, s.lastIndexOf(";")).trim();
            break;
          }
        }
        in.close();
        if(packageName==null || packageName.length()<=0) continue;
        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){
        if (!newDirectory.exists() && newDirectory.getCanonicalPath() != null) {
          newDirectory.mkdirs();
          directoriesCreated++;
        }

        String javaFileName = dirName + File.separator + srcFile.getName();
        if(srcFile.exists()){
        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);
          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());
    } catch (IOException e) {
      throw new BuildException("Problem loading JAR file - " + e.getMessage());
    }
    log(directoriesCreated+" directories created, "+filesCopied+" files copied");
    log(directoriesCreated + " directories created, " + filesCopied + " files copied");
  }
}

解説

上記のサンプルは、javaファイルをimportに対応するディレクトリに移動するプラグインです。何処かで(失念)拾ってきたサンプルを改造して作ったものです。マニュアルのDeveloping with Ant(Writing Your Own Task)なども参考にしてください。 生成されたjarファイルを%ANT_HOME%\libに置き、以下の要領でタスクを定義します。

解説

上記のサンプルは、javaファイルをimportに対応するディレクトリに移動するプラグインです。何処かで(失念)拾ってきたサンプルを改造して作ったものです。マニュアルのDeveloping with Ant(Writing Your Own Task)なども参考にしてください。 生成されたjarファイルを%ANT_HOME%\libに置き、以下の要領でタスクを定義します。
<target name="move-import">
  <taskdef name="MoveImportDir" 
  <taskdef name="MoveImportDir"
           classname="jp.co.ant.misc.MoveImportDirTask"
           classpath="importdir.jar" />
  <MoveImportDir src="./src" dest="./src-clean" />
</target>

参考リンク

参考リンク

コメント

コメント