将注释处理器与 Gradle 集成

2022-09-01 14:45:29

我需要编写一些注释处理器。我发现这篇博客文章提到了如何在一般设置和Eclipse中做到这一点。

然而,我正在使用IntelliJ IDEA和Gradle,如果有更好的(如indine,不那么乏味)方法来做到这一点,我会喜欢它。我正在寻找:

  1. 我应该能够在同一项目中编写注释处理器和将使用它们的代码,Gradle应该处理将处理器添加到类路径并在适当的阶段用javac调用它们。
  2. 如果上述操作无法实现,并且我必须创建两个单独的项目,那么至少应该可以将它们保留在同一个git存储库中。Gradle应该无缝地处理构建。
  3. 如果两者都不可能,并且我必须创建两个单独的git存储库,那么至少,Gradle应该无缝地处理链接博客文章中提到的内容,而无需进一步的手动干预。

我的git和Gradle技能是初学者水平。我将不胜感激任何帮助这项任务。谢谢。


答案 1

另一种解决方案(在我看来更干净)可能是拥有两个子项目,然后简单地使包含注释处理器的子项目成为主项目的依赖项。因此,给定两个包含子项目的目录:在项目的根目录中,您还需要有一个包含以下内容的文件:coreannotation-processorssettings.gradle

include 'core'
include 'annotation-processors'

然后在核心项目的 gradle 文件中:

dependencies {
    compile project(':annotation-processors')
}

这应该可以做到这一点,您不必处理自定义编译任务及其类路径。


答案 2

是的,可以将处理器移动到单独的模块,并从另一个模块使用它(见下文)。querydslapt

我会建议你实现你自己的抽象处理器

并像这样使用它:

dependencies {
    ....
    // put dependency to your module with processor inside
    querydslapt "com.mysema.querydsl:querydsl-apt:$querydslVersion" 
}

task generateQueryDSL(type: JavaCompile, group: 'build', description: 'Generates the QueryDSL query types') {
    source = sourceSets.main.java // input source set
    classpath = configurations.compile + configurations.querydslapt // add processor module to classpath
    // specify javac arguments
    options.compilerArgs = [
            "-proc:only",
            "-processor", "com.mysema.query.apt.jpa.JPAAnnotationProcessor" // your processor here
    ]
    // specify output of generated code
    destinationDir = sourceSets.generated.java.srcDirs.iterator().next()
}

您可以在此处找到完整示例


推荐