You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus+Gradle环境下实现文件保存触发代码生成器

可行!Quarkus + Gradle 实现目录文件修改自动触发生成器的方案

核心思路

利用Gradle的增量构建机制检测/src/main/java/core/data目录的文件变化,自动触发自定义生成器执行;同时结合Quarkus的Dev模式,在生成类更新后自动重载应用,完全对标JPA Metamodel Generator的触发逻辑。

具体实现步骤

情况1:自定义生成器是注解处理器(最常见场景)

如果你的生成器基于Java注解处理器实现,按以下配置操作:

  1. 引入生成器依赖
    在build.gradle的dependencies块中添加注解处理器依赖:
dependencies {
    // 替换为你的自定义生成器依赖(本地模块或Maven坐标)
    annotationProcessor project(':custom-generator')
    // 若生成器提供API类(如自定义注解),需添加implementation依赖
    implementation project(':custom-generator')
}
  1. 配置增量编译与触发条件
    让Gradle仅在core/data目录文件变化时,重新运行注解处理器:
tasks.withType(JavaCompile) {
    // 确保注解处理器路径正确
    options.annotationProcessorPath = configurations.annotationProcessor
    
    // 指定仅运行你的自定义生成器(可选,避免触发其他处理器)
    options.compilerArgs += [
        '-proc:only',
        '-processor', 'com.yourpackage.CustomGenerator' // 替换为生成器全类名
    ]
    
    // 配置输入输出,让Gradle识别增量变化
    inputs.dir(file('src/main/java/core/data'))
    outputs.dir(file('build/generated/sources/annotationProcessor/java/main'))
}
  1. 确保生成类被Quarkus识别
    默认情况下,Gradle注解处理器生成的类存放在build/generated/sources/annotationProcessor/java/main,Quarkus Dev模式会自动扫描该目录。若生成器输出到其他目录,需添加到sourceSets:
sourceSets {
    main {
        java {
            srcDirs += 'build/generated/sources/your-generator-output'
        }
    }
}

情况2:自定义生成器是独立任务(非注解处理器)

如果你的生成器是独立Java程序或脚本,需创建Gradle任务并配置触发条件:

  1. 定义生成器任务
    在build.gradle中创建自定义任务,指定输入输出目录:
task generateCustomClasses(type: JavaExec) {
    // 替换为生成器主类全类名
    mainClass = 'com.yourpackage.CustomGeneratorMain'
    // 生成器运行所需类路径
    classpath = sourceSets.main.runtimeClasspath
    // 传递参数:输入目录(core/data)和输出目录
    args = [
        'src/main/java/core/data',
        'build/generated/sources/custom/main'
    ]
    
    // 增量触发关键:指定输入输出目录
    inputs.dir(file('src/main/java/core/data'))
    outputs.dir(file('build/generated/sources/custom/main'))
}
  1. 关联编译任务
    让Java编译任务依赖生成器任务,确保生成类在编译前准备完成:
compileJava.dependsOn(generateCustomClasses)

// 将生成目录添加到源码集,让Quarkus能扫描到
sourceSets.main.java.srcDirs += 'build/generated/sources/custom/main'

验证效果

运行Quarkus Dev模式:

./gradlew quarkusDev

修改/src/main/java/core/data下的任意类并保存,Gradle会自动检测到变化,触发生成器执行;生成类更新后,Quarkus会自动重载应用,无需手动重启。


内容的提问来源于stack exchange,提问作者Biggy Poopa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 12:15:09