2016-12-14 85 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