2011-12-29 11 views
6

Estoy creando mi primer plugin de gradle. Intento copiar un archivo del contenedor de distribución en un directorio que he creado en el proyecto. Aunque el archivo existe dentro del contenedor, no puedo copiarlo en el directorio.Archivo de copia de plugin de Gradle del plugin jar

Este es mi código de tarea:

import org.gradle.api.DefaultTask; 
import org.gradle.api.tasks.TaskAction; 

class InitTask extends DefaultTask { 

    File baseDir; 

    private void copyEnvironment(File environments) { 
    String resource =  getClass().getResource("/environments/development.properties").getFile(); 
    File input = new File(resource); 
    File output = new File(environments, "development.properties"); 

    try { 
     copyFile(input, output); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } 

    void copyFile(File sourceFile, File destFile) { 
    destFile << sourceFile.text 
    } 

    @TaskAction 
    void createDirectories() { 
    logger.info "Creating directory." 

    File environments = new File(baseDir, "environments"); 
    File scripts = new File(baseDir, "scripts"); 
    File drivers = new File(baseDir, "drivers"); 

    [environments, scripts, drivers].each { 
     it.mkdirs(); 
    } 

    copyEnvironment(environments); 

    logger.info "Directory created at '${baseDir.absolutePath}'." 
    } 
} 

Y este es el error que estoy consiguiendo:

:init 
java.io.FileNotFoundException:  file:/path-to-jar/MyJar.jar!/environments/development.properties (No such  file or directory) 
    at java.io.FileInputStream.open(Native Method) 
    at java.io.FileInputStream.<init>(FileInputStream.java:120) 
    at groovy.util.CharsetToolkit.<init>(CharsetToolkit.java:69) 
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.newReader(DefaultGroovyMethods.java:15706) 
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.getText(DefaultGroovyMethods.java:14754) 
    at org.codehaus.groovy.runtime.dgm$352.doMethodInvoke(Unknown Source) 
    at org.codehaus.groovy.reflection.GeneratedMetaMethod$Proxy.doMethodInvoke(GeneratedMetaMethod.java:70) 
    at groovy.lang.MetaClassImpl$GetBeanMethodMetaProperty.getProperty(MetaClassImpl.java:3465) 
    at org.codehaus.groovy.runtime.callsite.GetEffectivePojoPropertySite.getProperty(GetEffectivePojoPropertySite.java:61) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:227) 
    at br.com.smartcoders.migration.tasks.InitTask.copyFile(InitTask.groovy:29) 

Sólo para destacar, los development.properties está dentro del directorio de ambientes dentro de la MYJAR .jar

Respuesta

1

getClass().getResource() devuelve una URL. Para acceder a esa URL, deberá leerla directamente (por ejemplo, con url.text) en lugar de convertirla primero en una Cadena/Archivo. O puede usar getClass().getResourceAsStream().text, que es probablemente más preciso. En ambos casos, puede especificar opcionalmente la codificación del archivo.

+0

Hola @peter! ¡Funcionó! este es el nuevo método copyEnvironment:. void copyEnvironment (ambientes) {recurso de cadena = InitTask.class.getResourceAsStream ("/ medio ambiente/development.properties") de texto; Salida de archivo = archivo nuevo (environments, "development.properties"); salida << recurso } – marceloemanoel

Cuestiones relacionadas