2016-12-14 42 views
0

在自定義插件(或任務)中,我想用類加載器讀取所有已編譯的類(最好是已從上次編譯更改的類),以便能夠使用反射在他們。Gradle自定義插件:讀編譯的Java類

這可能嗎?

1)如果在編譯Java類之後立即有廚師,這樣我就可以讀取它,這是非常好的,但是我沒有辦法做到這一點。

2)我在想這樣的事情...

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


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

回答

0

在gradle這個腳本getClass().getClassloader()將讓你的腳本的gradle的類加載器。這將不包含編譯的類或編譯/運行時jar。我想你想要做類似的東西:

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

如果你想只在類表現已經改變了你最好不要做,在一個incremental task