从自定义gradle插件中的jar复制文件

时间:2013-12-22 05:38:37

标签: java gradle

我编写了一个自定义gradle插件,我想将类路径中jar的特定文件复制到buildDir。我在一个沙盒项目中玩游戏并使这个解决方案正常工作:

task copyFile(type: Copy) {
            from zipTree(project.configurations.compile.filter{it.name.startsWith('spring-webmvc')}.singleFile)
            include "overview.html"
            into project.buildDir
        }

但如果将其复制到我的插件中:

project.task(type: Copy, "copyFile") {
            from zipTree(project.configurations.compile.filter{it.name.startsWith('spring-webmvc')}.singleFile)
            include "overview.html"
            into project.buildDir
        }

我收到了错误:

* What went wrong:
A problem occurred evaluating root project 'gradle-springdoc-plugin-test'.
> Could not find method zipTree() for arguments [/Users/blackhacker/.gradle/caches/artifacts-26/filestore/org.springframework/spring-webmvc/4.0.0.RELEASE/jar/a82202c4d09d684a8d52ade479c0e508d904700b/spring-webmvc-4.0.0.RELEASE.jar] on task ':copyFile'.

的结果
println project.configurations.compile.filter{it.name.startsWith('spring-webmvc')}.singleFile.class

class java.io.File

我做错了什么?

1 个答案:

答案 0 :(得分:4)

与构建脚本不同,插件没有隐式project上下文(除非你给它一个)。因此,您必须使用project.task而不是taskproject.zipTree而不是zipTreeproject.file而不是file等。

PS:在你的情况下,使用project.zipTree { ... }(注意花括号)来推迟搜索文件直到实际请求Zip内容是很重要的。否则,您可能会降低每个构建调用的速度(即使是那些从不执行copyFile的构建调用),如果文件是由同一构建生成的,甚至构建失败(因为在添加文件之前配置已解决)。