我花了最后几个小时试图找到符合我要求的解决方案,但是没有运气:
我有一项任务,必须在特定路径上运行一些逻辑:
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构建之外寻找其他解决方案?
答案 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()
您只需确保该部分位于使用属性的任务的定义之上。
我承认这有点“棘手”,但可以满足我的要求。