我正在编写一个gradle插件,为我的项目中的bean生成<Setter Property="IsChecked" Value="{Binding IsOpen, ElementName=Popup, Mode=TwoWay}"/>
。我的目标是在构建过程中生成和发布架构,因此我不需要手动更新它。
目前,我将json-schema
传递给我的任务并使用它来构建project.compileJava.inputs.files
。然后我将这些课程传递给schema generator。
为了确保正确生成json模式,我想使用目标应用程序中的URLClassLoader
。不幸的是,我的ObjectMapper
添加了杰克逊ObjectMapper
在该模块的深处,它会尝试检查我的类是否可以分配给Hibernate5Module.
并且因为HibernateProxy,
已加载Gradle的类加载器和我的类加载了HibernateProxy
一切爆炸。
我可以删除Hibernate模块,但是仍然会在其他类似的情况下触发bug,并且它使我的插件不易分发。所以我需要一种方法来在gradle的类路径中添加新条目,或者在运行时添加默认的类加载器。
供参考,以下是相关代码片段:
目标项目的build.gradle
URLClassLoader
公共类WriteJsonSchema扩展DefaultTask
jsonSchema {
classpath = project.compileJava.inputs.files
}
TL; DR:我需要一种方法来将新条目添加到gradle的类路径或运行时的默认类加载器。
答案 0 :(得分:4)
如果有人关心,我最终通过检查compilejava
任务的输出来获取项目类路径。
classpath = getProject().files();
getProject()
.getTasksByName("compileJava", true)
.forEach(task -> classpath = Classpath.plus(((JavaCompile)task).getClasspath()));
classpath = Classpath.plus(getProject().getTasks().getByName("jar").getOutputs().getFiles());