我在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
答案 0 :(得分:4)
我忘了groovy是如何运作的...如果你没有在一个领域指定一个范围是公开的吗?
Class.getFields()
仅返回类(和超类)中的公共字段。您可能需要使用Class.getDeclaredFields()
和Class.getSuperclass()
的组合来获取类层次结构中的private / protected / default范围字段。
如果您不想反映_Decorated
类,则可以直接引用该类,而不是使用该实例。
例如:groovy中的MyClass.fields
或MyClass.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
}