如何为代码生成配置 Gradle,以便 IntelliJ 识别生成的 java 源?

Posted

技术标签:

【中文标题】如何为代码生成配置 Gradle,以便 IntelliJ 识别生成的 java 源?【英文标题】:How to configure Gradle for code generation so that IntelliJ recognises generated java source? 【发布时间】:2018-03-20 07:43:45 【问题描述】:

我正在将旧项目迁移到 Gradle。构建过程的一个步骤是为专有协议生成 java 源代码。不幸的是,将项目导入 IntelliJ 时,无法识别生成的源代码,因此无法使用 IntelliJ 构建项目。

我有以下构建脚本(去掉了不相关的部分):

apply plugin: "base"
apply plugin: "java"

task generate 
    description "Generates java code"
    inputs.files(fileTree("src/codegen/"))
    outputs.dir("$buildDir/generated-src/")
    // ...
    // codegen
    // ...


compileJava 
    source(generate.outputs)

如果我添加以下部分,IntelliJ 会将生成的源添加为源,但无法将其识别为生成

sourceSets 
    main 
        java 
            srcDir "$buildDir/generated-src/"
        
    

有没有办法让 IntelliJ 将生成的源识别为生成的源,以便显示阻止编辑这些类的正常警告?

【问题讨论】:

你试过this post中给出的例子了吗? 我不确定,但也可能是:srcDirs += ["$buildDir/generated-src/"]. @Henrik:现在我拥有了,像魅力一样工作。谢谢!您要添加应得信用的答案吗? @PerHuss:我不介意。 :) 两秒钟。 @Opal: srcDir 部分按原样工作,来源已确定,只是我希望 IntelliJ 将其识别为生成... 【参考方案1】:

您需要特别告诉 Idea 该目录包含自动生成的源,如this post 中所述。

apply plugin: "idea"

sourceSets.main.java.srcDir new File(buildDir, '$buildDir/generated-src/')
idea 
    module 
        // Marks the already(!) added srcDir as "generated"
        generatedSourceDirs += file('$buildDir/generated-src/')
    

【讨论】:

以上是关于如何为代码生成配置 Gradle,以便 IntelliJ 识别生成的 java 源?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 gradle 发布任务设置超时?

在 Gradle 中为 Android 中的库项目构建变体

您如何为 jgit 设置 jschconfigsessionfactory 的配置以便拉取和推送工作?

JOOQ + Gradle:如何为 JOOQ 生成器定义多个模式?

android studio,如何为发布版本制作签名的 apk(使用 KTS 构建文件的 gradle)

如何为非Spring Boot的Java应用程序指定外部配置文件