在另一个任务中的一个任务的配置阶段设置属性

时间:2018-11-06 09:23:07

标签: gradle build properties configuration task

我花了最后几个小时试图找到符合我要求的解决方案,但是没有运气:

我有一项任务,必须在特定路径上运行一些逻辑:

task run(type: MyPlugin) {
    pathForPlugin = myPath //Defined as a property in another gradle file
}

我想在另一个任务中动态设置“ pathForPlugin”属性,因为必须从某些配置文件中读取它。

task initPaths(type: PathFinder) {
     configurationFile = 'C:\\myConfig.conf'
}

myConfig.conf如下所示:

pathForPlugin = 'C:\\Correct\\Path'

问题在于“ initPaths”必须在“运行”的配置阶段之前运行。 我已经尝试了几种方法(GradleBuild任务,dependsOn,对“延迟配置”使用插件中的属性),但是每种方法仅在执行阶段生效,导致“ pathForPlugin”始终保持其默认值。

我是否可以通过某种方式实现这一目标,还是应该在gradle构建之外寻找其他解决方案?

2 个答案:

答案 0 :(得分:0)

您可以这样做:

ext {
    myPath //use it as a global variable that you can set and get from different gradle tasks and files
}

task firstTask {
    doLast {
        ext.myPath = "your path"
    }
}


task run(type: MyPlugin) {
   doFirst { //executed on runtime not on task definition
       pathForPlugin = ext.myPath //Defined as a property in another gradle file
   }
}

//example 2 - create run task dynamic
task initPath {
    doLast {
        tasks.create(name: "run", type: MyPlugin) {
             pathForPlugin = ext.myPath
        }
    }
}

答案 1 :(得分:0)

我找到了解决问题的方法:

我没有定义任务“ initPaths”,而是直接在构建脚本中使用了Java类“ Pathfinder”:

import mypackage.PathFinder;

new PathFinder(project).run()

您只需确保该部分位于使用属性的任务的定义之上。

我承认这有点“棘手”,但可以满足我的要求。