Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在任务创建期间访问项目扩展?_Java_Groovy_Gradle - Fatal编程技术网

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特有的常规任务吗?它是由您的插件创建的,只能在应用插件时使用,但稍后将进行配置。