2011-12-29 19 views
6

私は最初のgradleプラグインを作成しています。私は、ディストリビューション・ジャーからプロジェクトで作成したディレクトリにファイルをコピーしようとしています。ファイルはjarファイル内にありますが、ディレクトリにコピーすることはできません。プラグインジャーからのGradle Pluginコピーファイル

これは私のタスクコードです:

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}'." 
    } 
} 

そして、これは私が取得していますエラーです:

: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) 

をするだけ強調して、development.propertiesはMYJAR内部環境ディレクトリ内にあります.jar

答えて

1

getClass().getResource()はURLを返します。そのURLにアクセスするには、最初に文字列/ファイルに変換するのではなく、直接URLを読み取る必要があります(url.textなど)。または、おそらくより正確なgetClass().getResourceAsStream().textを使用することができます。どちらの場合でも、オプションでファイルエンコーディングを指定できます。

+0

こんにちは!出来た! これは新しいcopyEnvironmentメソッドです。 void copyEnvironment(environments){ String resource = InitTask.class.getResourceAsStream( "/ environments/development.properties")。text; ファイル出力=新しいファイル(environments、 "development.properties"); 出力<<リソース } – marceloemanoel

関連する問題