我有一个项目,其布局如下:
src/ java generated
src / java包含jpa实体和使用由hibernate元模型注释处理器生成的jpa元模型类的查询类。
将注释处理并入Java插件的最佳方法是什么?
我目前已定义以下任务,但是它对compileJava具有任务依赖性,因为某些代码取决于注释处理器生成的类,所以该任务将失败。
task processAnnotations(type: Compile) { genDir = new File("${projectDir}/src/generated") genDir.mkdirs() source = ['src/java'] classpath = sourceSets.test.compileClasspath destinationDir = genDir options.compilerArgs = ["-proc:only"] }
之所以processAnnotations依赖,compileJava是因为您将测试编译类路径放在前一个任务的编译类路径上,并且测试编译类路径包含已编译的生产代码(即的输出compileJava)。
processAnnotations
compileJava
至于如何最好地解决眼前的问题,您不需要单独的编译任务。Java编译器可以调用注释处理器,并一次编译它们的生成源(连同原始源)(请参阅注释处理)。您需要做的一件事是将注释处理器放在编译类路径上:
configurations { hibernateAnnotationProcessor } dependencies { hibernateAnnotationProcessor "org.hibernate: ..." } compileJava.compileClasspath += configurations.hibernateAnnotationProcessor
(您不想将注释处理器添加到compile配置中,因为那样会将其视为生产代码的依赖项。)
compile
据我所知,这就是全部(假设您使用的是JDK6或更高版本)。