2016-12-14 6 views
0

In einem benutzerdefinierten Plugin (oder Task) möchte ich alle kompilierten Klassen (vorzugsweise diejenigen, die sich von der letzten Kompilierung geändert haben) mit einem Classloader lesen, so dass ich Reflection verwenden kann auf sie.Gradle Custom Plugins: Kompilierte Java-Klasse lesen

Ist das möglich?

1) Es wäre toll, einen Koch zu haben, direkt nachdem eine Java-Klasse kompiliert wurde, so dass ich sie lesen konnte, aber ich fand keine Möglichkeit, dies zu tun.

2) Ich bin so etwas wie diese denken ...

compileJava.doLast { 
    ClassLoader parent = getClass().getClassLoader(); 
    GroovyClassLoader loader = new GroovyClassLoader(parent); 


    // retrieve all class files 
    // for each class file, loader.parseClass(classFile) 
} 

Antwort

0

In einem gradle Skript getClass().getClassloader() finden Sie die Classloader des gradle Skript erhalten. Dies wird NICHT die kompilierten Klassen oder Kompilierungs-/Laufzeit-Jars enthalten. Ich glaube, Sie etwas Ähnliches tun:

Collection<URL> urls = sourceSets.main.runtimeClasspath.files.collect { it.toURI().toURL() } 
Classloader parent = new URLClassLoader(urls.toArray()); 

Wenn Sie nur auf die Klassen handeln, die sich geändert haben Sie am besten tun zu tun, dass in einer incremental task

Verwandte Themen