سؤال

هل هناك مهمة ANT (على غرار مهام FTP أو SCP) تتيح لي نسخ مجموعة من الملفات إلى مشاركة Windows (SMB)؟

تحرير: اضطررت إلى إنشاء مهمة باستخدام 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;
   }
}
هل كانت مفيدة؟

المحلول

لا أعتقد أن هناك مهمة خارج الصندوق لذلك ، ولكن يمكنك بسهولة بناء واحدة حولها jcifs (تطبيق Java لمكتبة Samba).

نصائح أخرى

يجب أن تكون قادرًا على استخدام فقط ينسخ المهمة ، طالما تم تركيب حصتك.

أنا أستخدم مكتبات النمل المجمعة بـ Eclipse (Windows) ويمكنني استخدام مهمة النسخ لنسخ الملفات إلى مشاركة الشبكة. أراهن أن نفس الأعمال مع 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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top