Gradle自定义插件:读取编译的Java类

时间:2016-12-14 22:28:45

标签: java gradle groovy build gradle-plugin

在自定义插件(或任务)中,我想用类加载器读取所有已编译的类(最好是那些从上次编译中改变的类),以便我能够对它们使用反射。

这可能吗?

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)
}

1 个答案:

答案 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

中执行此操作