【问题标题】:Gradle plugin copy file from plugin jar插件 jar 中的 Gradle 插件复制文件
【发布时间】:2012-01-30 02:31:09
【问题描述】:

我正在创建我的第一个 gradle 插件。我正在尝试将分发 jar 中的文件复制到我在项目中创建的目录中。尽管该文件存在于 jar 中,但我无法将其复制到目录中。

这是我的任务代码:

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 中的环境目录中

【问题讨论】:

    标签: plugins resources jar task gradle


    【解决方案1】:

    getClass().getResource() 返回一个 URL。要访问该 URL,您必须直接读取它(例如使用 url.text),而不是先将其转换为字符串/文件。或者您可以使用getClass().getResourceAsStream().text,这可能更准确。在这两种情况下,您都可以选择指定文件编码。

    【讨论】:

    • 嗨@peter!有效!这是新的 copyEnvironment 方法: void copyEnvironment(environments) { String resource = InitTask.class.getResourceAsStream("/environments/development.properties").text;文件输出 = new File(environments, "development.properties");输出
    猜你喜欢
    • 2011-10-09
    • 2021-12-05
    • 2019-03-02
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    相关资源
    最近更新 更多