Plugins 在Gradle插件中定义任务的正确方法是什么?

Plugins 在Gradle插件中定义任务的正确方法是什么?,plugins,gradle,Plugins,Gradle,我正在尝试创建我的第一个Gradle插件。 1.为属性添加扩展:project.extensions.create(“abc”,AbcExtension) 2.定义复制任务。当我以下面的方式定义任务时 project.task("abcTask", type: Copy) { from project.abc.fromPath into project.abc.intoPath } project.task("abcTask", type: Copy) << { fro

我正在尝试创建我的第一个Gradle插件。
1.为属性添加扩展:
project.extensions.create(“abc”,AbcExtension)

2.定义复制任务。当我以下面的方式定义任务时

project.task("abcTask", type: Copy) {
  from project.abc.fromPath
  into project.abc.intoPath
}
project.task("abcTask", type: Copy) << {
  from project.abc.fromPath
  into project.abc.intoPath
}
project.abc.fromPath等于
AbcExtension.fromPath
value-它不从
build.gradle
读取值
当我以下面的方式定义任务时

project.task("abcTask", type: Copy) {
  from project.abc.fromPath
  into project.abc.intoPath
}
project.task("abcTask", type: Copy) << {
  from project.abc.fromPath
  into project.abc.intoPath
}

project.task(“abcTask”,type:Copy)插件必须将每次读取可变的构建模型值(即可以从构建脚本设置的任何内容)推迟到至少配置阶段结束。有几种方法可以实现这一目标。其中包括:

  • 使用接受闭包作为值的Gradle API(例如,
    Copy.from
  • 使用回调,如
    project.afterEvaluate{}
    gradle.projectsEvaluated{}
  • 使用约定映射机制(请注意,这不是公共特性)
为手头的工作选择最佳方案需要一些专业知识。(研究中的一些插件可能会有所帮助。)在您的情况下,我可能会执行以下操作:

project.task("abcTask", type: Copy) {
    from { project.abc.fromPath }
    into { project.abc.intoPath }
}
你的
这个问题也帮了我很多忙