我编写了一个自定义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
我做错了什么?
答案 0 :(得分:4)
与构建脚本不同,插件没有隐式project
上下文(除非你给它一个)。因此,您必须使用project.task
而不是task
,project.zipTree
而不是zipTree
,project.file
而不是file
等。
PS:在你的情况下,使用project.zipTree { ... }
(注意花括号)来推迟搜索文件直到实际请求Zip内容是很重要的。否则,您可能会降低每个构建调用的速度(即使是那些从不执行copyFile
的构建调用),如果文件是由同一构建生成的,甚至构建失败(因为在添加文件之前配置已解决)。