如何在gradle脚本中使用任务外的变量

维奈维尔玛

我陷入了需要从战争文件中读取文件(对于某些值,比如说版本号)并在同一脚本中的其他地方使用它的情况(我为此目的使用复制任务分解战争文件)。为了说明需要,我将用下面的例子写下来:

定义变量:

def projVersion = "NULL"

爆发战争:

task explodedWar(type: Copy) {
    from zipTree("$buildPath/projectName.war")
    into file("$buildPath/projectName")
}

从展开的文件夹中读取文件并获取值:

task warVersion(dependsOn : ['explodedWar']) <<{
        Properties versionFile = new Properties()
        versionFile.load(new FileInputStream("$buildPath/projectName/META-INF/MANIFEST.MF"))
        ext.projVersion = versionFile.getProperty("Version")
}

在任务外使用变量新值时(这部分抛出错误):

println "Variables new value: " + warVersion.projVersion 

在其他任务中使用变量新值时(这部分成功):

task VersionPrint(dependsOn : ['warVersion']) <<{
    println "Project Version under print task" + warVersion.projVersion
}

基本上,我可以在同一个脚本中的任何其他任务中使用变量的新值,但是当我尝试在任务区域之外使用变量的新值时(抱歉,这是必要的),它抛出错误:

错误(在任务外使用变量时)***

* What went wrong:
A problem occurred evaluating root project 'Scripts'.
> Could not find property 'projVersion' on task ':warVersion'

让我知道,我是否正在努力实现可以实现的目标?或者它会成为 gradle 的打破规则的方式吗?如果可能我正在寻找什么,请让我知道解决方案,如何实现。

昵称

您没有正确考虑构建生命周期

当您定义warVersion依赖于任务时explodedWar,您是在告诉 Gradle 您希望projVersionwarVersion任务执行期间设置该属性

这意味着,你不能尝试读取属性,直到之后warVersion运行任务。否则,它不会被定义。如果您尝试“在任务之外使用该值”,您将不再等待warVersion任务运行。任务范围之外的代码将在配置阶段执行,而不是执行阶段。

当我尝试在任务区域之外使用变量新值时(抱歉,这是必要的),它抛出错误:

您需要重构定义projVersion变量的方式。

  1. 您可以重构您的代码,这样您就不需要在任务之外使用该值。
  2. 您可以将新PropertyStateAPI 用于延迟评估的属性。
  3. 您可以更改要在配置阶段执行的逻辑。

最后一个并不理想,因为它绕过了任务便利,例如最新检查。但是,您可以通过将复制任务更改为 call 来尝试一下Project#copy,然后读取属性文件并声明您的属性值,所有这些都在任务范围之外:

copy {
    from zipTree("$buildPath/projectName.war")
    into file("$buildPath/projectName")
}

Properties versionFile = new Properties()
versionFile.load(new FileInputStream("$buildPath/projectName/META-INF/MANIFEST.MF"))
ext.projVersion = versionFile.getProperty("Version")

此代码将在配置阶段执行。现在,在此之后的任何地方您都应该能够引用ext.projVersion.

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Gradle任务中使用参数?

来自分类Dev

如何在psql脚本中使用变量

来自分类Dev

如何在Gradle中使用复制任务复制目录

来自分类Dev

如何在Powershell脚本传入的SQL脚本中使用变量

来自分类Dev

在Azure Devops中,如何在运行Shell脚本的“ Azure CLI任务v.2”中使用管道变量?

来自分类Dev

如何在循环python外的for循环中使用变量

来自分类Dev

shell脚本-如何在shell脚本中使用变量而不在脚本中定义变量

来自分类Dev

在Gradle构建脚本中使用变量

来自分类Dev

如何在Shell脚本中使用Jenkins环境变量?

来自分类Dev

如何在mv命令中使用shell脚本变量

来自分类Dev

如何在PHP中存储变量以在不同脚本中使用?

来自分类Dev

如何在MSBuild脚本中使用自定义变量?

来自分类Dev

如何在Powershell脚本中使用Jenkins变量

来自分类Dev

如何在我的Matlab脚本(临时变量)中使用“ parfor”?

来自分类Dev

如何在带有变量的bash脚本中使用“ head”?

来自分类Dev

如何在shell脚本文件中使用json变量?

来自分类Dev

如何在python脚本中使用shell变量

来自分类Dev

如何在mv命令中使用shell脚本变量

来自分类Dev

如何在shell脚本文件中使用json变量?

来自分类Dev

从shell设置变量:如何在脚本中使用它们?

来自分类Dev

如何在脚本代码行中使用变量?

来自分类Dev

如何在bash脚本的for循环中使用参数变量?

来自分类Dev

如何在Shell脚本中使用变量扩展

来自分类Dev

如何在 shell 脚本变量中使用 {old,new}name?

来自分类Dev

如何在expect脚本的if条件中使用变量?

来自分类Dev

从SSIS执行过程任务中使用变量运行SQLCMD脚本

来自分类Dev

从SSIS执行过程任务中使用变量运行SQLCMD脚本

来自分类Dev

如何在cmd脚本中使用PSExec(或类似工具)杀死任务

来自分类Dev

我如何在从Powershell脚本传入的SQL脚本中使用变量

Related 相关文章

  1. 1

    如何在Gradle任务中使用参数?

  2. 2

    如何在psql脚本中使用变量

  3. 3

    如何在Gradle中使用复制任务复制目录

  4. 4

    如何在Powershell脚本传入的SQL脚本中使用变量

  5. 5

    在Azure Devops中,如何在运行Shell脚本的“ Azure CLI任务v.2”中使用管道变量?

  6. 6

    如何在循环python外的for循环中使用变量

  7. 7

    shell脚本-如何在shell脚本中使用变量而不在脚本中定义变量

  8. 8

    在Gradle构建脚本中使用变量

  9. 9

    如何在Shell脚本中使用Jenkins环境变量?

  10. 10

    如何在mv命令中使用shell脚本变量

  11. 11

    如何在PHP中存储变量以在不同脚本中使用?

  12. 12

    如何在MSBuild脚本中使用自定义变量?

  13. 13

    如何在Powershell脚本中使用Jenkins变量

  14. 14

    如何在我的Matlab脚本(临时变量)中使用“ parfor”?

  15. 15

    如何在带有变量的bash脚本中使用“ head”?

  16. 16

    如何在shell脚本文件中使用json变量?

  17. 17

    如何在python脚本中使用shell变量

  18. 18

    如何在mv命令中使用shell脚本变量

  19. 19

    如何在shell脚本文件中使用json变量?

  20. 20

    从shell设置变量:如何在脚本中使用它们?

  21. 21

    如何在脚本代码行中使用变量?

  22. 22

    如何在bash脚本的for循环中使用参数变量?

  23. 23

    如何在Shell脚本中使用变量扩展

  24. 24

    如何在 shell 脚本变量中使用 {old,new}name?

  25. 25

    如何在expect脚本的if条件中使用变量?

  26. 26

    从SSIS执行过程任务中使用变量运行SQLCMD脚本

  27. 27

    从SSIS执行过程任务中使用变量运行SQLCMD脚本

  28. 28

    如何在cmd脚本中使用PSExec(或类似工具)杀死任务

  29. 29

    我如何在从Powershell脚本传入的SQL脚本中使用变量

热门标签

归档