我编写了一个自定义 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
}
Run Code Online (Sandbox Code Playgroud)
但如果将其复制到我的插件中:
project.task(type: Copy, "copyFile") {
from zipTree(project.configurations.compile.filter{it.name.startsWith('spring-webmvc')}.singleFile)
include "overview.html"
into project.buildDir
}
Run Code Online (Sandbox Code Playgroud)
我得到了错误:
* 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'.
Run Code Online (Sandbox Code Playgroud)
的结果
println project.configurations.compile.filter{it.name.startsWith('spring-webmvc')}.singleFile.class
Run Code Online (Sandbox Code Playgroud)
是
class java.io.File
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
与构建脚本不同,插件没有隐式project上下文(除非你给它一个)。因此,您必须使用project.task而不是task,project.zipTree而不是zipTree,project.file而不是file,等等。
PS:在您的情况下,重要的是使用project.zipTree { ... }(注意花括号)推迟搜索文件,直到实际请求 Zip 内容。否则,您可能会减慢每次构建调用(即使是那些从未执行过的调用copyFile),并且,如果文件是由同一个构建生成的,甚至构建失败(因为配置在添加文件之前已解决)。
| 归档时间: |
|
| 查看次数: |
3274 次 |
| 最近记录: |