当前位置: 首页 > 知识库问答 >
问题:

Gradle/Groovy从块内部引用“文件范围/全局”变量

梁鸿风
2023-03-14

在我的构建文件中,我有以下行:

version = '1.1.2'

我想使用ShadowJar制作一个可执行的胖jar(见我的答案),然后将其复制到另一个目录(见这里的答案)。但是我想将项目的版本号合并到jar文件的名称中,以免覆盖现有版本。

阴影插件用户指南解释了如何设置名称:

shadowJar {
    baseName = 'shadow'
    classifier = null
    version = "7.7.7"
}

... 但是我如何在这里设置变量version来使用外部(文件范围/全局…)变量版本?

共有1个答案

齐弘业
2023-03-14

在gradle脚本中,范围中有一个项目实例,所有内容都委托给该实例。当你说版本=“1.1.2”时,它实际上是在调用

getProject().setVersion('1.1.2')

在shadowJar闭包中,范围中有一个更高的版本,它隐藏了项目版本。所以你可以做

shadowJar {
    version = project.version
    ...
}
 类似资料:
  • 问题内容: 给定以下代码: 因为函数变量中的代码在外部范围内,但不在全局范围内。是否可以在函数内修改变量?我当然可以从和阅读,但是如何修改? 问题答案: Python 3.x具有关键字。我认为这可以满足您的要求,但是我不确定您是在运行python 2还是3。 非本地语句使列出的标识符引用最近的封闭范围中的先前绑定的变量。这很重要,因为绑定的默认行为是首先搜索本地名称空间。该语句允许封装的代码在全局

  • 问题内容: 这将编译 这不会 我希望两者都能编译(也许这是C的工作方式?)。是什么原因导致无法在外部块中以相同的名称声明一个块中的变量? 问题答案: 简短的答案是:因为这是JLS§6.4中定义Java语言的方式。 您可能从其他语言中使用过,因此允许使用所谓的可变阴影。但是,Java语言的发明者认为这是一个笨拙的功能,他们不希望使用其语言: 此限制有助于检测其他一些非常模糊的错误。 但是,正如作者在

  • 问题内容: 如何在解决方案中全局禁止StyleCop警告? 该解决方案使用Jenkins(连续构建和集成工具)不断构建,并应用了所有StyleCop规则。该解决方案使用TAB字符而不是4个空格,因为这是我的开发团队所采用的标准。因此,StlyeCop会引发几个SA1027警告。 如何从詹金斯删除SA1027警告?那也有帮助。 在每个C#文件上提供SuppressMessage看起来并不好。这就是为

  • 问题内容: 我在环境指令的管道顶部定义了环境变量: 但是我需要在阶段中动态设置或覆盖一些内容。但是,如果我在一个阶段中使用environment {}指令,则其他阶段将无法访问var。最初,我认为我可以在top环境指令中使用默认值定义它们,并在管道中覆盖它们,但这是我观察到的行为: 在环境块中定义var 尝试覆盖script {}块,例如: 该环境不会被覆盖 如何更改环境? 问题答案: 您可以按照

  • 问题内容: 此代码为何起作用: 但这给出了“分配前引用的局部变量’var’”错误: 问题答案: 因为在第一个代码中,您已经创建了一个局部变量并使用了它的值,而在第二个代码中,您正在使用局部变量,而没有对其进行定义。 因此,如果要使第二个功能正常工作,则需要声明:- 在使用该功能之前。 而在此代码中: 更新 :- 但是,按照@Tim的注释,您不应在函数内部使用变量。最好在使用变量之前先定义变量,然后

  • 我试图建立一个应用程序,引用一个openapi规范,这是已经发表在ArtFactory。这意味着我将把foo.yaml作为一个依赖项,但我似乎不知道如何通过openapitools生成器插件实际引用该文件。 鉴于openapi规范可用于生成服务器代码和客户机代码,因此将其单独发布并简单地拉入实现并由实现引用是非常有意义的。 通用域名格式。公司巴-1.0。10含有foo。yaml位于罐子的顶部。 我