gradle - 如何访问 Plugin Java 源代码中的 gradle.ext 属性?
问题描述
我需要一个属性(一个)在应用插件时可用,并且(两个)允许在settings.gradle
文件中计算覆盖值。项目属性将是理想的,因为它可以在以下位置设置默认值gradle.properties
:
# gradle.properties
myProp=originalValue
这很棒,因为它可以用类似的命令行参数覆盖-PmyProp=newValue
,但我无法找到在执行之前(即在应用插件之前)覆盖settings.gradle
文件中属性的好方法。build.gradle
例如,所有这些rootProject.myProp
在插件应用程序中都保持不变:
// settings.gradle
rootProject.getProperties.put("myProp", "overrideValue")
settings.ext.myProp = "overrideValue"
settings.extensions.myProp = "overrideValue"
gradle.startParameters.projectProperties.myProp = "overrideValue"
我们不能在其中任何一个中做任何魔术,因为在块build.gradle
之前不能存在任何逻辑:plugins
// build.gradle
plugins {
id 'com.myCompany.myPlugin' version 1.0.0 // 'myProp' must be set by now
}
我能想到的一种解决方法是使用:
// settings.gradle
gradle.ext.myProp = "overrideValue"
...但是似乎没有访问gradle.ext
Java源代码(对于插件)中的属性的好方法,或者有吗?
解决方案
这似乎适用于gradle.ext.myProp
用例,但令我惊讶的是,唯一可行的方法是将 Gradle 对象转换为ExtensionAware
对象:
// MyPlugin.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");
}
似乎我想要做的事情应该是司空见惯的,那么有没有更好的方法,比如单独使用项目属性?
如果是这样,那么您如何更改settings.gradle
文件中的值?
推荐阅读
- wso2 - 如何为这个角色添加权限?
- azure-ad-b2c - 如何使用共享邮件预先创建用户以通过 Graph API 重置密码
- cordova - 添加 cordova-plugin-wkwebview-engine 时,Mobilefirst 8 cordova 应用程序崩溃
- python - 如何在向导的 One2many 树中创建可用按钮?
- java - java邮件javax.mail.MessagingException:异常
- git - 如何将在分支上开发的修复移动到另一个
- c# - WPF Datagrid 在列之间边界的任一侧的列标题中都有看起来像边界的东西
- unity3d - 如何使用 Oculus Locomotion Controller 禁用方向?
- node.js - 如何解决socket-io无限发送连接请求?
- unity3d - 如何使对象在移入 Unity 时向相反方向弯曲