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

如何从Gradle静态编程语言DSL表达式中访问项目版本?

董子平
2023-03-14

我有一个使用Kotlin DSL的Gradle 5.3构建脚本,类似于:

plugins {
    `kotlin-dsl`
    `java-library`
}

group = "my.company"
version = "1.2.3"

在这里,version= 解析为 org.gradle.api.Project.setVersion

现在,再往下,我想这样做(从Groovy DSL构建文件移植):

tasks.named<Jar>("jar") {
    manifest {
        attributes(
            "Product-Version" to version
        )
    }
}

在这里,版本解析为抽象ArchiveTask。getVersion——不是我想要的(也不推荐使用)!

计算我可以使用静态编程语言的合格this,我尝试使用

"${this@Project.version}"

相反(注意:额外的字符串换行消除了一个额外的类型错误),但是我现在得到了< code > Unresolved reference:@ Project 。

如何从 Kotlin DSL 表达式中访问项目版本?

共有1个答案

商开宇
2023-03-14

Gradle脚本似乎没有嵌套在<code>项目</code>中,而是将访问器委托给它的相关属性。事实上,这个的顶级<code>类型是<code>Build_gradle</code>。

当这些访问器被阴影化时,可以使用变量项目;那是

project.version

解决了手头的问题。作为替代方案,

this@Build_gradle.version

也是有效的,但可读性较差。

 类似资料:
  • 为了描述Gradle构建脚本,我们可以通过< code>build.gradle.kts文件使用Kotlin。在< code>dependencies和build 部分全局定义要使用的Kotlin版本是一个常见的问题(在给定的情况下使用不同的版本是相当罕见的)。 请考虑以下代码 (Gradle 4.3.1): 如您所见,kotlin(在本例中为1.2.30)定义了两次:和,它们通常没有区别。由于D

  • 我试图用OkHttp和Cucumber在静态编程语言中设置一个Spring启动项目,并且在运行Cucumber任务时遇到以下错误。如何修复? 还有build gradle kts片段 我看到了这个错误https://github.com/square/okio/issues/647看起来可能是它,并修复了这个build.gradle,我如何将其翻译为kotlinbuild.gradle.kts?

  • 正如标题所说,我正在尝试将Java和Kotlin混合在一个项目中。这里有一个很好的例子。混合java kotlin hello world。除了kotlin在src/main/Java/somepackage/SomeClass中找不到我的任何Java类之外,所有的东西都正常工作。Java语言 这是什么原因? 我的身材。gradle看起来像这样 而不是开始尝试在更大的项目上实现这一点。我试图通过创

  • 到目前为止,我一直在使用这个静态编程语言密封类: 这在我的Kotlin和Java代码中都非常有效。今天我尝试将这个类改为使用对象(建议减少额外的类实例化): 我可以在我的其他静态编程语言文件中引用这个简单的版本,但是我现在正在努力在我的Java文件中使用它。 当我尝试在Java中引用时,我尝试了以下两种回弹编译错误: 有人知道我现在如何在Java中引用该实例吗?

  • 有可能从Java代码中访问扩展函数吗? 我在静态编程语言文件中定义了扩展函数。 其中MyModel是(生成的)java类。现在,我想在我的普通java代码中访问它: 然而,那是行不通的。IDE无法识别bar()方法,编译失败。 work使用kotlin的静态函数: 通过使用导入com.test.extensions.ExtensionsPackage我的IDE似乎配置正确。 我从kotlin文档中

  • 下面是Groovy的一个示例,它正好代表了我想要实现的目标: 命令行: 这个例子的来源在这里-选项3。 如何读取Kotlin DSL中的pass和值?