在自定义插件(或任务)中,我想用类加载器读取所有已编译的类(最好是那些从上次编译中改变的类),以便我能够对它们使用反射。
这可能吗?
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 :(得分: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
中执行此操作