2011-12-29 29 views
6

Tôi đang tạo plugin gradle đầu tiên của mình. Tôi đang cố gắng sao chép một tập tin từ jar phân phối vào một thư mục tôi đã tạo ra tại dự án. Mặc dù tệp tồn tại bên trong bình, tôi không thể sao chép nó vào thư mục.Plugin Gradle sao chép tệp từ plugin jar

Đây là mã nhiệm vụ của tôi:

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

Và đây là lỗi tôi nhận được:

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

Chỉ cần nhấn mạnh, các development.properties là bên trong môi trường thư mục bên trong MyJar .jar

Trả lời

1

getClass().getResource() trả lại URL. Để truy cập URL đó, bạn sẽ phải đọc trực tiếp URL đó (ví dụ: url.text) thay vì trước tiên chuyển đổi nó thành Chuỗi/Tệp. Hoặc bạn có thể sử dụng getClass().getResourceAsStream().text, có lẽ chính xác hơn. Trong cả hai trường hợp, bạn có thể tùy chọn chỉ định mã hóa tệp.

+0

Hi @peter! Nó đã làm việc! đây là phương pháp copyEnvironment mới: bản sao voidMôi trường (môi trường) { Tài nguyên chuỗi = InitTask.class.getResourceAsStream ("/ environment/development.properties"). File output = new File (môi trường, "development.properties"); đầu ra << tài nguyên } – marceloemanoel

Các vấn đề liên quan