如何在构建时或运行时向“groovy-gradle-plugin”传递参数

4nkexdtk  于 2023-06-28  发布在  其他
关注(0)|答案(1)|浏览(119)

我是为gradle编写插件的新手,我遵循这里的示例:
https://docs.gradle.org/current/userguide/structuring_software_products.html
在“build-logic/commons/src/main/groovy”下有一些gradle文件,我想在文件编译时传递一个值,在插件运行时传递一个值。你是怎么做到的
下面是示例代码:

plugins {
    id('java')
}

group = 'com.example.myproduct'

dependencies {
    implementation(platform("com.example.platform:product-platform:${build_version}"))

    testImplementation(platform("com.example.platform:test-platform:${run_version}"))
}

这个想法是在运行“groovy-gradle-plugin”时指定值${build_version}(因此该值被编译到插件中),并允许在运行生成的插件时指定${run_version}。
我不清楚如何设置这两个值(即使在大量搜索之后)。另外,需要注意的是,如果我在中硬编码值,生成的插件会按预期工作。
我试过用

ext {
  build_version = "1.0"
}

但似乎都不管用

pexxcrt2

pexxcrt21#

根据@User51的评论,我需要在使用插件的应用程序中将以下内容添加到settings.gradle中(这很重要,因为它不能在构建文件中的插件之前设置):

gradle.ext.myProp = "overrideValue"

然后我的插件:

plugins {
    id('java')
}

String myProp = (String) project.getRootProject().getProperties().getOrDefault("myProp", null);
Gradle gradle = project.getRootProject().getGradle();
if ((myProp == null)  && (gradle instanceof ExtensionAware)) {
    ExtensionAware gradleExtensions = (ExtensionAware) gradle;
    myProp = (String) gradleExtensions.getExtensions().getExtraProperties().get("myProp");
}
System.out.println("myProp=" + myProp)

group = 'com.example.myproduct'

dependencies {
    implementation(platform("com.example.platform:product-platform:${myProp}"))
}

这里需要注意的是再次订购。我们需要在plugin块之后定义myProp,但在依赖项部分使用它之前。

相关问题