更改Gradle中生成的代码的输出目录 [英] Change output directory of generated code in 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 $ c $
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屋!