使用Intellij 2017.2 / out目录进行构建会重复/ build目录中的文件


68

更新到Intellij 2017.2之后,构建我的项目将创建一个/out目录,其中包含生成的源文件和资源文件。这些文件复制已包含在其中的文件,/build并导致duplicate class生成的类的编译器错误。我在Gradle或IntelliJ中需要修复的任何想法吗?

Answers:


73

IntelliJ IDEA不再与Gradle共享输出,请参阅此故障单以获取详细信息

您可以通过以下配置覆盖它:

allprojects {
 apply plugin: 'idea'
 idea {
   module {
     outputDir file('build/classes/main')
     testOutputDir file('build/classes/test')
   }
 }
 if(project.convention.findPlugin(JavaPluginConvention)) {
   // Change the output directory for the main and test source sets back to the old path
   sourceSets.main.output.classesDir = new File(buildDir, "classes/main")
   sourceSets.test.output.classesDir = new File(buildDir, "classes/test")
 }
}

或将构建委托给Gradle:设置| 构建,执行,部署| 生成工具| 摇篮| Runner =>委托IDE构建/运行操作以进行gradle。


3
@JackB不要混淆gradle idea生成项目的命令行和idea在IntelliJ IDEA导入项目时使用的插件,它们不相关并且会生成不同的项目文件。
CrazyCoder

8
但是,将IDE构建/运行操作委托给gradle则要慢得多。:(
Michael L

2
将IDE与Gradle或Maven之类的脚本一起使用的全部目的是,IDE可以拾取gradle脚本,并以最小的麻烦快速构建项目。但是,如果每次都必须构建gradle脚本,则所有操作都会变慢。抱歉,您正在使一个非常有用的工具无效。
Ikthiander '18 -10-9

3
您现在有两个输出文件夹。脚本本身将在build文件夹中构建所有内容。因此,如果您希望某些任务使用gradle生成一些Java类,它们将始终在build文件夹中生成。和ide in out文件夹。您不能手动将其设置为源文件夹,因为每个gradle构建都将重置您的自定义设置。ide仅编译显式源集,生成的集甚至不可单击或遍历。至少在2017年以前,我可以在build / classes / ...中添加一个伪造的源,而ide可以找到它,现在不再可用。变得一团糟。
Ikthiander '18 -10-9

2
这样做的问题是IntelliJ不执行资源过滤,因此运行时说用
springResource

14

档案| 项目结构 项目设置| 模块| 路径标签| 编译器输出

选择“继承项目编译输出路径”以继续/build用于构建工件


4
但是,一旦您运行gradle build构建目录,它的所有重复项就会返回
Clashsoft

14
IntelliJ IDEA不再与Gradle共享输出,有关详细信息,请参阅youtrack.jetbrains.com/issue/IDEA-175172
CrazyCoder

11
@CrazyCoder,感谢您对youtrack问题的有趣链接。那里的讨论建议(除其他事项外)尝试将IDEA构建/运行委托给Gradle。我对out目录的重复(但有所不同)结构有类似的问题,但是在设置File | 设置| 构建,执行,部署| 生成工具| 摇篮| Runner =>委托IDE生成/运行操作来获得更好的结果。也许不是每个人都适合,但对于许多人来说可能就是这样。
virgo47年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.