Gradle插件扩展设置Map类型的属性

时间:2017-11-17 09:15:23

标签: java gradle-plugin

我想在我的插件扩展中设置属性Map。所以基本上我想写点像

settings {
  envVars = {
    a = "abc"
    b = "dec"
    ...
    n = "sdf"
  }
}

当我在Extension类

中使用属性时
private Map<?,?> envVars;

Gradle告诉我它无法设置属性设置。所以我想要实现的是在我的扩展类中设置值的映射。

我所做的就是在写下以下内容时获得结束:

settings {
  envVars {
    a = "abc"
    b = "dec"
    ...
    n = "sdf"
  }
}

public class extension {
....
    public envVars(Closure c){}
}

但是我不知道如何处理闭包以及如何访问内部的内容,所以我宁愿使用Map而不是闭包

此致 的Mathias

2 个答案:

答案 0 :(得分:0)

好的,你只需要正确地写出地图:/

envVars = [test: 'test']

一切都很好

答案 1 :(得分:0)

我正在使用以下内容从build.gradle中读取值映射

参考:https://github.com/liquibase/liquibase-gradle-plugin

容器类:

class Database {
  def name
  def arguments = [logLevel: 'info']

  Database(String name) {
    this.name = name
  }

扩展类:

class MyExtension {
  final NamedDomainObjectContainer<Database> databases
  def databases(Closure closure){
    databases.configure(closure)
  }

  def methodMissing(String name, args) {
    arguments[name] = args[0]
  }
}

加载扩展程序

  def databases = project.container(Database) { name ->
      new Database(name)
    }
  project.configure(project) {
      extensions.create("extensionName", MyExtension, databases)
  }

样本build.gradle:

dbDiff{
  databases{
    db1{
      url  'testUrl'
    }
   }
 }