Gradle:如何初始化SourceTask';s财产‘;来源’;有扩展属性吗?
我的插件注册了一个扩展和一些从Gradle:如何初始化SourceTask';s财产‘;来源’;有扩展属性吗?,gradle,groovy,gradle-plugin,Gradle,Groovy,Gradle Plugin,我的插件注册了一个扩展和一些从org.gradle.api.tasks.SourceTask继承的自定义任务 class MyPlugin implements Plugin<Project> { private final Instantiator instantiator private final FileResolver fileResolver @Inject MyPlugin (Instantiator instantiator, File
org.gradle.api.tasks.SourceTask
继承的自定义任务
class MyPlugin implements Plugin<Project> {
private final Instantiator instantiator
private final FileResolver fileResolver
@Inject
MyPlugin (Instantiator instantiator, FileResolver fileResolver) {
this.instantiator = instantiator
this.fileResolver = fileResolver
}
void apply(Project project) {
MyPluginExtension extension = project.extensions.create("myPlugin", MyPluginExtension, project, instantiator, fileResolver)
project.tasks.create('doSomething', MyCustomTask) {}
}
}
class MyPluginExtension {
final MySourceSetContainer source
MyPluginExtension(Project project, Instantiator instantiator, FileResolver fileResolver) {
source = instantiator.newInstance(ImplMySourceSetContainer, project, instantiator, fileResolver)
}
void source(Closure closure) {
ConfigureUtil.configure(closure, source)
}
}
class MyCustomTask extends SourceTask {
@TaskAction
void act() {
// something
}
}
-一切正常。但是我想通过MyPluginExtension
中的值初始化任务属性source
source=extension.source.findAll().inject(project.files().asFileTree,{result,item->result+item.html.asFileTree})
我无法在执行阶段提取userguide()中描述的扩展属性,因为在超类org.gradle.api.tasks.SourceTask
中声明的source
的getter将被跳过,该getter用注释@org.gradle.api.tasks.SkipWhenEmpty
标记,任务将被跳过
在执行阶段之前,如何使用扩展中的值初始化任务的属性?
Thx.我不确定我是否完全理解您在做什么,但您可能会使用关闭来延迟评估。看 例如:
我不确定我是否完全理解您在做什么,但您可能会使用关闭来延迟评估。看 例如:
通过在闭包中包装源init解决:
class MyPlugin implements Plugin<Project> {
// ...
void apply(Project project) {
MyPluginExtension extension = project.extensions.create("myPlugin", MyPluginExtension, project, instantiator, fileResolver)
project.tasks.create('doSomething', MyCustomTask) { task ->
task.source = {
extension.source.findAll().inject(new HashSet<File>(), { result, item -> result + item.html.srcDirs })
}
}
}
}
classmyplugin实现插件{
// ...
无效申请(项目){
MyPluginExtension=project.extensions.create(“myPlugin”,MyPluginExtension,project,instantiator,fileResolver)
创建('doSomething',MyCustomTask){task->
task.source={
extension.source.findAll().inject(新的HashSet(),{result,item->result+item.html.srcDirs})
}
}
}
}
通过在闭包中包装源init解决:
class MyPlugin implements Plugin<Project> {
// ...
void apply(Project project) {
MyPluginExtension extension = project.extensions.create("myPlugin", MyPluginExtension, project, instantiator, fileResolver)
project.tasks.create('doSomething', MyCustomTask) { task ->
task.source = {
extension.source.findAll().inject(new HashSet<File>(), { result, item -> result + item.html.srcDirs })
}
}
}
}
classmyplugin实现插件{
// ...
无效申请(项目){
MyPluginExtension=project.extensions.create(“myPlugin”,MyPluginExtension,project,instantiator,fileResolver)
创建('doSomething',MyCustomTask){task->
task.source={
extension.source.findAll().inject(新的HashSet(),{result,item->result+item.html.srcDirs})
}
}
}
}
我想从名为“myPlugin”(typeMyPluginExtension
)的扩展中获取source
值,提取FileTree对象,并将其设置为task属性(MyCustomTask.source
)。我想从名为“myPlugin”(typeMyPluginExtension
)的扩展中获取source
值,提取FileTree对象,并将其设置为任务属性(MyCustomTask.source
)。
class MyPlugin implements Plugin<Project> {
// ...
void apply(Project project) {
MyPluginExtension extension = project.extensions.create("myPlugin", MyPluginExtension, project, instantiator, fileResolver)
project.tasks.create('doSomething', MyCustomTask) { task ->
task.source = {
extension.source.findAll().inject(new HashSet<File>(), { result, item -> result + item.html.srcDirs })
}
}
}
}