更改Gradle中生成的代码的输出目录 [英] Change output directory of generated code in gradle

查看:2654
本文介绍了更改Gradle中生成的代码的输出目录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

项目包含注释处理器,它在编译期间生成Java代码。默认情况下,gradle输出将源文件生成到 build / classes 目录中。这会导致IntelliJ发现新生成的源文件时出现问题。



是否有任何直接的配置gradle的方式将源文件输出到另一个目录中?例如 $ buildDir / gen / main / java $ buildDir / build / generated / main / java ?<对于java编译器有一个选项,它允许为生成的java源定制输出目录( >) docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.htmlrel =nofollow noreferrer> documentation )。


-s dir



指定放置生成的源文件的目录。
目录必须已经存在; javac不会创建它。如果一个类是包
的一部分,编译器将源文件放在一个反映包名的子目录
中,根据需要创建目录。例如,如果您指定-s C:\ mysrc并将该类称为
com.mypackage.MyClass,则源文件将放置在
C:\ mysrc \\ \\ $ \\ b


$ build.gradle

  compileJava {
options.compilerArgs<< -s
options.compilerArgs<< $ projectDir / generated / java

doFirst {
//确保该目录存在
文件(新文件(projectDir,/generated/java\")).mkdirs ()
}
}

clean.doLast {
//必要时清理目录
文件(新文件(projectDir,/ generated ))。deleteDir()
}

sourceSets {
generated {
java {
srcDir$ projectDir / generated / java
}
}
}

接下来是这段代码:




  • 创建并指定目录作为生成代码的输出
  • 如果调用clean任务,
  • 会删除生成的源文件
  • >
  • 添加新的源集



  • 更新



    改用gradle apt插件


    Project contains annotation processor which generates java code during compilation. By default, gradle outputs generated source files into build/classes directory. That causes some problems with discovery of newly generated source files by IntelliJ.

    Is there any straightforward way of configuring gradle to output source files into another directory? For example $buildDir/gen/main/java or $buildDir/build/generated/main/java?

    解决方案

    There is an option for java compiler which allows to customize output directory for generated java sources (documentation).

    -s dir

    Specify the directory where to place generated source files. The directory must already exist; javac will not create it. If a class is part of a package, the compiler puts the source file in a subdirectory reflecting the package name, creating directories as needed. For example, if you specify -s C:\mysrc and the class is called com.mypackage.MyClass, then the source file will be placed in C:\mysrc\com\mypackage\MyClass.java.

    Example of build.gradle

    compileJava {
        options.compilerArgs << "-s"
        options.compilerArgs << "$projectDir/generated/java"
    
        doFirst {
            // make sure that directory exists
            file(new File(projectDir, "/generated/java")).mkdirs()
        }
    }
    
    clean.doLast {
        // clean-up directory when necessary
        file(new File(projectDir, "/generated")).deleteDir()
    }
    
    sourceSets {
        generated {
            java {
                srcDir "$projectDir/generated/java"
            }
        }
    }
    

    This code snippet does next:

    • creates and specifies directory as output for generated code
    • deletes generated sources if clean task is invoked
    • adds new source set

    Update

    Use gradle apt plugin instead.

    这篇关于更改Gradle中生成的代码的输出目录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆