在任务创建期间访问项目扩展?
Access Project Extensions during task creation?
我在 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
值将始终为空。这就是要走的路:
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"))
}
我在 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
值将始终为空。这就是要走的路:
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"))
}