4

是否有允许我将一组文件复制到 windows (smb) 共享的 ant 任务(类似于 ftp 或 scp 任务)?

编辑:我必须为此使用 jcifs 创建一个任务。如果有人需要,这里是代码。

取决于 jcifs 和 apache ioutils。

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import jcifs.smb.SmbFile;

import org.apache.commons.io.IOUtils;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.taskdefs.Copy;

public class SmbCopyTask extends Task
{
   private File src;
   private String tgt;

   public void execute() throws BuildException
   {
      try
      {
         recursiveCopy(src);
      }
      catch (Exception e)
      {
         throw new BuildException(e);
      }
   }

   public void recursiveCopy(File fileToCopy) throws IOException
   {

      String relativePath = src.toURI().relativize(fileToCopy.toURI()).getPath();
      SmbFile smbFile = new SmbFile(tgt, relativePath);
      if(!smbFile.exists()) 
      {
         smbFile.createNewFile();
      }
      if(!fileToCopy.isDirectory()) 
      {
         System.out.println(String.format("copying %s to %s", new Object[]{fileToCopy, smbFile}));
         IOUtils.copy(new FileInputStream(fileToCopy), smbFile.getOutputStream());
      }
      else
      {
         File[] files = fileToCopy.listFiles();
         for (int i = 0; i < files.length; i++)
         {
            recursiveCopy(files[i]);
         }
      }
   }

   public void setTgt(String tgt)
   {
      this.tgt = tgt;
   }

   public String getTgt()
   {
      return tgt;
   }

   public void setSrc(File src)
   {
      this.src = src;
   }

   public File getSrc()
   {
      return src;
   }
}
4

3 回答 3

3

我不认为有一个开箱即用的 ant 任务,但您可以轻松地围绕jcifs(Samba 库的 Java 实现)构建一个。

于 2010-01-13T19:47:52.203 回答
3

我正在使用与 Eclipse(Windows) 捆绑的 ant 库,我可以使用复制任务将文件复制到网络共享。我敢打赌,命令行中的 ANT 也同样适用。

<copy todir="//server_name/share_name" overwrite="true" verbose="true">
<fileset dir="./WebContent">
    <patternset refid="sources"/>
    <different targetdir="//server_name/share_name" ignoreFileTimes="true"/>
</fileset></copy>
于 2011-03-11T16:09:56.067 回答
2

只要您的共享已挂载,您就应该能够使用复制任务。

于 2010-01-13T19:54:02.243 回答