一尘不染

您如何将Java注释处理器集成到Java插件中

hibernate

我有一个项目,其布局如下:

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"]
}

阅读 214

收藏
2020-06-20

共1个答案

一尘不染

之所以processAnnotations依赖,compileJava是因为您将测试编译类路径放在前一个任务的编译类路径上,并且测试编译类路径包含已编译的生产代码(即的输出compileJava)。

至于如何最好地解决眼前的问题,您不需要单独的编译任务。Java编译器可以调用注释处理器,并一次编译它们的生成源(连同原始源)(请参阅注释处理)。您需要做的一件事是将注释处理器放在编译类路径上:

configurations {
    hibernateAnnotationProcessor
}

dependencies {
    hibernateAnnotationProcessor "org.hibernate: ..."
}

compileJava.compileClasspath += configurations.hibernateAnnotationProcessor

(您不想将注释处理器添加到compile配置中,因为那样会将其视为生产代码的依赖项。)

据我所知,这就是全部(假设您使用的是JDK6或更高版本)。

2020-06-20