2010-01-13 1 views
5

Есть ли задача ant (аналогично задачам ftp или scp), которая позволила бы мне скопировать набор файлов в общий доступ к окнам (smb)?Ant Задача для копирования на Windows Share (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; 
    } 
} 
+0

Надеюсь, вы это увидите. Я пытаюсь использовать вашу задачу. Я скомпилировал его и экспортировал его из eclipse (включая все зависимые объекты), однако Ant врезался в проблему, и я получил java.lang.NoClassDefFoundError: jcifs/smb/SmbFile). Я предполагаю, что я просто что-то пропустил. Любые советы/идеи? –

ответ

3

Я не думаю, что есть из коробки муравей задачи для этого, но вы можете легко построить один вокруг jcifs (реализацию Java библиотеки Samba).

2

Вы должны иметь возможность использовать задачу copy, если ваша доля установлена.

+0

К сожалению, я не являюсь пользователем root на машине сборки, и мне нужно будет пройти через большое beauracracy, чтобы получить сетевое соединение. – SamBeran

1

Я использую библиотеки муравьев в комплекте с 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> 
+1

это не будет работать на других ящиках, которые окна. –