2010-01-13 14 views
5

Esiste un task ant (simile a attività ftp o scp) che consentirebbe di copiare un set di file in una condivisione di Windows (smb)?Task Ant per copiare in Windows Share (SMB)

Modifica: ho dovuto creare un'attività utilizzando jcifs per questo. Se qualcuno ne ha bisogno, ecco il codice.

Dipende da jcifs e 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

Speriamo che lo vedrete. Sto tentando di usare il tuo compito. L'ho compilato ed esportato da Eclipse (compresi tutti gli oggetti dipendenti), tuttavia Ant si mette nei guai e ottengo un java.lang.NoClassDefFoundError: jcifs/smb/SmbFile) - Presumo che mi manchi solo qualcosa di facile. Qualche consiglio/idea? –

risposta

3

Non credo che ci sia un fuori il compito formica scatola per questo, ma si potrebbe facilmente costruire uno intorno jcifs (un'implementazione Java della biblioteca Samba).

2

Dovresti essere in grado di utilizzare semplicemente l'attività copy, purché la condivisione sia montata.

+0

Sfortunatamente, non sono un utente root sul computer di costruzione e dovrei passare attraverso una grande beauracracy per ottenere un mount di rete. – SamBeran

1

Sto utilizzando le librerie di formiche in bundle con Eclipse (Windows) e posso utilizzare l'attività di copia per copiare i file in una condivisione di rete. Scommetto che lo stesso funziona con ANT anche dalla riga di comando.

<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

questo non funzionerà su altre finestre che finestre. –

Problemi correlati