我想在Gradle中尝试基于规则的新配置来配置我的插件.Plugin的目标是将数据上传到云存储,如Google Drive或S3.我需要为用户想要使用的每个存储配置一个配置.所以,我想要实现的是:
model { backup { // this is a container for all storages I want to support googleDrive { clientId = '' clientSecret = '' accessToken = '' refreshToken = '' } s3 { // S3 specific config (like API keys) } } }
在我的插件中,我为backup
元素配置规则源:
class BackupPlugin implements Plugin{ static class Rules extends RuleSource { @Model void backup(BackupPluginExtension backupModel) {} } } @Managed interface BackupPluginExtension { GoogleDrive getGoogleDrive() void setGoogleDrive(GoogleDrive googleDrive) } @Managed interface GoogleDrive { String getClientId() void setClientId(String clientId) String getClientSecret() void setClientSecret(String clientSecret) String getAccessToken() void setAccessToken(String accessToken) String getRefreshToken() void setRefreshToken(String refreshToken) }
但是,这不起作用:Could not find method googleDrive() for arguments [build_8w85xu7hrz3atgeg839d33hzl$_run_closure1_closure2_closure3@1b06ac95] on root project 'test'.
.看起来它试图在里面调用方法backup
而不是配置嵌套bean.
那么,正确的语法是什么?
我知道命名集合,但问题是如何配置自定义bean层次结构.