2016-05-21 26 views
4

Ich erstelle ein grodle-Plugin in groovy, aber ich kann nicht auf die Felder der Klasse zugreifen. Hier ist, was ich habe:Gradle - Kann nicht auf Klassenfelder zugreifen

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 
} 

Ausgabe

MyClass_Decorated 
__$stMC 
boolean 

Erwartet

MyClass 
myField 
String 
+0

, welche Methode ist Feld anwenden? ist MyClass innere Klasse von MyPlugin? – AdamSkywalker

+0

@AdamSkywalker Ich habe meinen Beitrag aktualisiert – CMPS

Antwort

4

ich vergessen, wie groovy Werke ..., wenn Sie nicht über einen Bereich auf einem Feld angeben ist es öffentlich?

Class.getFields() gibt nur die öffentlichen Felder in der Klasse (und Super-Klassen) zurück. Möglicherweise müssen Sie eine Kombination aus Class.getDeclaredFields() und Class.getSuperclass() verwenden, um die Felder private/protected/default scoped in der Klassenhierarchie abzurufen. Wenn Sie die Klasse _Decorated nicht widerspiegeln möchten, können Sie die Klasse direkt referenzieren, anstatt die Instanz zu verwenden.

ZB: MyClass.fields oder MyClass.declaredFields in groovy

Oder: MyClass.class.getFields() oder MyClass.class.getDeclaredFields() in java

+0

MyClass.declaredFields funktioniert. Vielen Dank! – CMPS

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 
} 
+0

hoffentlich hilft dieser Ihnen –

+0

Das von Ihnen angegebene Beispiel zeigt nicht, warum die Reflexion nicht funktioniert – CMPS

+0

gehen Sie durch diese Website, http://pkaq.github.io/gradledoc/docs/userguide/ custom_plugins.html –

Verwandte Themen