如何在使用Gradle编译时,在IntelliJ中将构建目录包含为源代码目录

11

默认情况下,Gradle Idea插件将构建文件夹标记为已排除的。我怎样将此文件夹包括作为源文件夹?(或避免排除它,因为默认情况下似乎是这样...)

在我的模块build.gradle文件中,我尝试了以下两种配置:

idea {
    module {
        excludeDirs -= file('build/generated')
    }
}

和:

idea {
    module {
        sourceDirs += file('build/generated')
    }
}

使用这两个配置后,文件夹build/generated在编译后总是出现在IntelliJ的排除文件夹中。 在IntelliJ中,我总是需要进入“项目设置”,“模块”,然后在“源”选项卡中将build文件夹从排除文件夹中移除,才能运行我的项目。


对于在IDEA中使用内置的gradle导入功能(即非gradle插件)的人们,请前往https://youtrack.jetbrains.com/issue/IDEA-104847进行投票。 - Shorn
5个回答

16

在IntelliJ中,您一定希望build目录被排除在外。否则,索引时间会更长,搜索结果会重复等等。由于IntelliJ不支持包含被排除目录的子目录,我的首选解决方案是将生成的文件放入build之外的目录中。例如,您可以将它们放入generated目录(相对于项目目录),并相应地配置clean任务:

clean {
    delete "generated"
}

另一个选项是排除build的所有子目录,除了build/generated。然而,由于需要明确列出要排除的目录,这需要更多的努力,并且存在易碎性的风险。(您不希望每次插件/任务等添加新的子目录时都会中断此操作。)


所以我想我无法与IntelliJ斗争,每次构建后都必须手动标记所需的目录。 - RiRomain
问题是我无法控制那个其他模块,它是由同事编写的,需要一段时间才能进行任何更改。排除子目录后,将主目录构建排除,因此无法帮助获取我需要的目录作为源根目录。现在唯一的解决方案是从排除列表中删除构建目录,并在构建后将生成的目录标记为源根目录(gradle cleanIdea idea删除此配置,因此我必须在每次构建后执行此操作。由于Gradle模块对于我们的大型项目来说太慢了,我别无选择)。无论如何,感谢您的时间 :-) - RiRomain

7

将代码从

file('build/generated')

to

file("$buildDir/generated")

我在这里使用的是可工作的代码:

ext {
    cxfOutputDir = file("$buildDir/generated-sources/cxf")
}
idea.module {
    excludeDirs -= file("$buildDir")
    sourceDirs += cxfOutputDir
}

1

这对我有效!

apply plugin: 'idea'

idea {
    module {
        excludeDirs -= buildDir
    }
}

是的,这个方法可以实现并且符合问题的要求,但值得注意的是,它现在会包括构建目录中的所有内容,而不仅仅是生成的代码,这是不可取的(重复项、索引时间更长等)。 - xlm

0

第一种方法

['integration/src/generated'].each {
            idea.module.sourceDirs += file(it)
            sourceSets.main.java.srcDir it
            compileJava.source file(it)
    }

第二种方法
project.ext {
        jaxbTargetDir = file("src/generated/java")
}

idea.module {
        excludeDirs -= file("$buildDir")
        sourceDirs += jaxbTargetDir
} 

0

使用标准位置生成源代码 - 无需额外配置即可支持:

${project.buildDir}/generated-sources/something

或者

${project.buildDir}/generated-test-sources/something

仅用于测试生成的代码。

something 表示技术,例如:jpamodelcxf 等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接