Gradle - 无法访问类字段

时间:2016-05-21 23:05:52

标签: gradle groovy

我在groovy中创建了一个gradle插件,但我无法访问该类的字段。这就是我所拥有的:

public class MyPlugin implements Plugin<Project> {
  void apply(Project project) {
     project.extensions.create("myClass", MyClass)
     println project.myClass.getClass().getName()
     for(Field field : project.myClass.getClass().getFields()) {
        println field.getName()
        println field.getType()
     }
  }
}

class MyClass {
  @MyAnnotation("Hello world")
  String myFeild
}

输出

MyClass_Decorated
__$stMC
boolean

预期

MyClass
myField
String

2 个答案:

答案 0 :(得分:4)

我忘了groovy是如何运作的...如果你没有在一个领域指定一个范围是公开的吗?

Class.getFields()仅返回类(和超类)中的公共字段。您可能需要使用Class.getDeclaredFields()Class.getSuperclass()的组合来获取类层次结构中的private / protected / default范围字段。

如果您不想反映_Decorated类,则可以直接引用该类,而不是使用该实例。

例如:groovy中的MyClass.fieldsMyClass.declaredFields

或者:java中的MyClass.class.getFields()MyClass.class.getDeclaredFields()

答案 1 :(得分:3)

apply plugin: GreetingPlugin

greeting {

    message = 'Hi'
    greeter = 'Gradle'
}

class GreetingPlugin implements Plugin<Project> {

    void apply(Project project) {
        project.extensions.create("greeting", GreetingPluginExtension)
        project.task('hello') << {
            println "${project.greeting.message} from ${project.greeting.greeter}"
        }
    }
}

class GreetingPluginExtension {

    String message
    String greeter
}