Java 在任务创建期间访问项目扩展?
我在Java 在任务创建期间访问项目扩展?,java,groovy,gradle,Java,Groovy,Gradle,我在myplugin.gradle中创建了一个插件: apply plugin: MyPlugin class MyPluginExtension { String srcDir = null } class MyTask extends DefaultTask { @InputFiles FileCollection srcFiles @TaskAction def task() { println srcFiles } } class My
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"))
}
}
}
}
应用插件:MyPlugin
类myplugin{
字符串srcDir=null
}
类MyTask扩展了DefaultTask{
@输入文件文件集合文件
@任务行动
def任务(){
println文件
}
}
类MyPlugin实现插件{
@凌驾
无效申请(项目){
计划{
project.extensions.create(“myConfig”,myplugin)
创建(名称:“firstTask”,类型:MyTask){
srcFiles=files(fileTree(dir:“mySrcDir”,//需要访问srcDir
包括:“***.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
霉菌{
srcDir='lol'
}
类MyTask扩展了DefaultTask{
@输入文件
文件集合文件
@任务行动
def任务(){
println文件
}
}
类myplugin{
字符串srcDir=null
}
类MyPlugin实现插件{
@凌驾
无效申请(项目){
project.extensions.create('myConfig',MyPluginExtension)
project.tasks.create(名称:“firstTask”,类型:MyTask)
}
}
首要任务{
srcFiles=project.files(project.fileTree(dir:project.myConfig.srcDir,包括:“***.java”))
}
为什么不在任务执行期间读取此值?@Opal我需要此值来设置MyTask
输入的srcFiles
。这必须在任务之外设置,以便gradle可以跟踪任务是否最新以及是否有任何源文件已更改。在这种情况下,firstTask
不是myPlugin特有的常规任务吗?它是由您的插件创建的,只能在应用插件时使用,但稍后将进行配置。