2010-01-13 12 views
5

¿Existe una tarea ant (similar a las tareas ftp o scp) que me permita copiar un conjunto de archivos a un recurso compartido de windows (smb)?Ant Tarea para copiar a Windows Share (SMB)

Editar: Tuve que crear una tarea usando jcifs para esto. Si alguien lo necesita, aquí está el código.

Depende de jcifs y 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

Esperemos que vea esto. Estoy intentando usar tu tarea. Lo compilé y lo exporté desde eclipse (incluidos todos los objetos dependientes) sin embargo, Ant tiene problemas y me sale un java.lang.NoClassDefFoundError: jcifs/smb/SmbFile) - Supongo que me está perdiendo algo fácil. ¿Alguna sugerencia/idea? –

Respuesta

3

No creo que hay un fuera de la caja tarea ant para eso, pero aquí se puede construir uno en torno jcifs (una implementación de Java de la biblioteca Samba).

2

Debería poder simplemente usar la tarea copy, siempre que su participación esté montada.

+0

Desafortunadamente, no soy un usuario root en la máquina de compilación, y tendría que pasar por una beauracracy grande para obtener un montaje de red. – SamBeran

1

Estoy usando las bibliotecas ant agrupadas con Eclipse (Windows) y puedo usar la tarea de copiar para copiar archivos a un recurso compartido de red. Apuesto a que lo mismo funciona con ANT desde la línea de comandos también.

<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

esto no funcionará en otros cuadros de esa ventana. –

Cuestiones relacionadas