Задайте свойства на этапе настройки задачи в другой задаче - PullRequest
0 голосов
/ 06 ноября 2018

Я потратил последние несколько часов, пытаясь найти решение для моего требования, без удачи:

У меня есть задача, которая должна выполнить некоторую логику по определенному пути:

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 должен запускаться до фазы конфигурации run. Я пробовал несколько подходов для этого (задача GradleBuild, зависит от, Использование свойств в плагине для «Ленивая конфигурация»), но каждый подход вступает в силу только в фазе выполнения, приводящей к тому, что «pathForPlugin» всегда остается со своим значением по умолчанию.

Есть ли какой-то способ, которым я могу это реализовать, или я должен искать другое решение за пределами сборки gradle?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Я нашел решение проблемы:

Вместо определения задачи «initPaths» я непосредственно использовал java-класс «Pathfinder» в скрипте сборки:

import mypackage.PathFinder;

new PathFinder(project).run()

Необходимо только убедиться, что эта часть находится выше определения задачи, в которой используются свойства.

Я признаю, что это немного "хакерское" решение, но оно отлично подходит для моих требований.

0 голосов
/ 06 ноября 2018

вы можете сделать так:

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
        }
    }
}
...