gpt4 book ai didi

java - 在任务创建期间访问项目扩展?

转载 作者:行者123 更新时间:2023-11-30 08:13:25 24 4
gpt4 key购买 nike

我在 myplugin.gradle 中创建了一个插件:

apply plugin: MyPlugin

class MyPluginExtension {
String srcDir = null
}

class MyTask extends DefaultTask {

@InputFiles FileCollection srcFiles

@TaskAction
def task() {
println srcFiles
}
}

class MyPlugin implements Plugin<Project> {

@Override
void apply(Project project) {
project.with {
project.extensions.create("myConfig", MyPluginExtension)
tasks.create(name: "firstTask", type: MyTask) {
srcFiles = files(fileTree(dir: "mySrcDir", // need to access srcDir
include: "**/*.java"))
}
}
}
}

当我创建任务时,我需要设置srcFiles。为此,我需要从插件扩展访问 srcDir 属性。我想用插件扩展中指定的 srcDir 替换 mySrcDir

我需要它来设置 MyTask 输入的 srcFiles。这必须在任务外部设置,以便 gradle 可以跟踪任务是否是最新的以及是否有任何源文件已更改。

如何在任务创建期间从项目扩展访问属性?

最佳答案

这是不可能的。您需要创建扩展,使用它,然后配置任务。现在您创建扩展并立即使用它来配置任务 - srcDir 值将始终为 null。这就是要走的路:

apply plugin: MyPlugin

myConfig {
srcDir = 'lol'
}

class MyTask extends DefaultTask {

@InputFiles
FileCollection srcFiles

@TaskAction
def task() {
println srcFiles
}
}

class MyPluginExtension {
String srcDir = null
}

class MyPlugin implements Plugin<Project> {

@Override
void apply(Project project) {
project.extensions.create('myConfig', MyPluginExtension)
project.tasks.create(name: "firstTask", type: MyTask)
}
}

firstTask {
srcFiles = project.files(project.fileTree(dir: project.myConfig.srcDir, include: "**/*.java"))
}

关于java - 在任务创建期间访问项目扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30018865/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com