如何让IntelliJ识别gradle生成的源代码目录?

所以,我有一个XJC javaExec,像顶部一样旋转,但IntelliJ不会识别生成的输出,尽管标记了generated-src/java 。 我需要调整插件的想法吗?

注意:插件本身是从根build.gradle

XJC项目:

 description = "Generates sources and compiles them into a Jar for $project" configurations { xjc } dependencies { xjc 'org.glassfish.jaxb:jaxb-xjc:2.2.11' xjc 'org.glassfish.jaxb:jaxb-runtime:2.2.11' } task xjc (type:JavaExec) { doFirst{ File generatedSrcDir = file("$buildDir/generated-src/java") if (!generatedSrcDir.exists()) { generatedSrcDir.mkdirs() } } main = "com.sun.tools.xjc.XJCFacade" classpath configurations.xjc def argsList = [ "-mark-generated", "-no-header", "-verbose", // or -quiet or nothing for default. "-target", "2.1", "-encoding", "UTF-8", "-d", "$buildDir/generated-src/java", "-catalog","$projectDir/src/main/resources/commons-gradle.cat", file("$projectDir/src/main/resources/v1/") ] args argsList inputs.files files(file("$projectDir/src/main/resources/v1/")) outputs.files files(file("$buildDir/generated-src/java"),file("$buildDir/classes")) } compileJava { dependsOn xjc source "${buildDir}/generated-src" } 

在依赖于这个项目的项目中,我只需要:

 compile project(":path:to:schemas:the-test-schema") 

我试过了:

 idea { module { def buildDir = file("$buildDir") def generatedDir = file("$buildDir/generated-src") def listOfDirs = [] buildDir.eachDir { file -> if (file.name != buildDir.name && file.name != generatedDir.name) listOfDirs.add(file) } excludeDirs = listOfDirs.toArray() generatedSourceDirs += file("$buildDir/generated-src/java") scopes.COMPILE.plus += [ configurations.xjc ] } } 

我将指出丹尼尔·德卡尼(Daniel Dekany)的一个解决方案,这个解决方案实际上是连接到这个问题的Gradle讨论中 。 去引用:

 apply plugin: "idea" ... sourceSets.main.java.srcDir new File(buildDir, 'generated/javacc') idea { module { // Marks the already(!) added srcDir as "generated" generatedSourceDirs += file('build/generated/javacc') } } 

适合我。

这个答案的代码,使用Kotlin DSL重写,将如下所示:

 plugins { idea } val generatedSourcesPath = file("out/production/classes/generated") java.sourceSets["main"].java.srcDir(generatedSourcesPath) idea { module { generatedSourceDirs.add(generatedSourcesPath) } }