【问题标题】:Building with Intellij 2017.2 /out directory duplicates files in /build directory使用 Intellij 2017.2 /out 目录构建会复制 /build 目录中的文件
【发布时间】:2017-12-23 19:20:52
【问题描述】:

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

【问题讨论】:

    标签: java intellij-idea gradle


    【解决方案1】:

    IntelliJ IDEA 不再与 Gradle 共享输出,请see this ticket for details

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

    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。

    【讨论】:

    • @JackB 不要把生成项目的gradle idea命令行和IntelliJ IDEA导入项目时使用的idea插件混为一谈,这些没有关系,会产生不同的项目文件。
    • 将 IDE 构建/运行操作委托给 gradle 的速度要慢得多。 :(
    • 使用带有 Gradle 或 Maven 等脚本的 IDE 的全部意义在于,IDE 可以获取 gradle 脚本,并且可以轻松快速地构建项目。但是如果你每次都必须构建 gradle 脚本,那么你所有的操作都会变慢。很抱歉,您让一个非常有用的工具变得无用。
    • 您现在有两个输出文件夹。脚本本身将构建 build 文件夹中的所有内容。所以如果你想让一些任务使用 gradle 生成一些 java 类,它们总是会在 build 文件夹中生成。和 out 文件夹中的 ide。您不能手动将其设为源文件夹,因为每个 gradle 构建都会重置您的自定义设置。 ide 只编译显式源集,生成的集甚至不可点击或遍历。以前在 2017 年,至少我可以添加一个假源作为 build/classes/... ide 会找到它,现在它不会了。它变得一团糟。
    • 这个问题是 IntelliJ 不执行资源过滤所以运行说 spring boot with resourceFiltering for yml files 你的运行母鸡失败了,因为令牌没有被 IntelliJ 替换,这很有趣
    【解决方案2】:

    文件 |项目结构 |项目设置 |模块 |路径选项卡 |编译器输出

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

    【讨论】:

    • 但是一旦你运行gradle build,构建目录就会返回所有的副本
    • IntelliJ IDEA 不再与 Gradle 共享输出,详情请参阅youtrack.jetbrains.com/issue/IDEA-175172
    • @CrazyCoder,感谢您提供指向 youtrack 问题的有趣链接。那里的讨论建议(除其他外)尝试将 IDEA 构建/运行委托给 Gradle。我在out 目录的重复(但不同)结构方面遇到了类似的问题,但是在设置 File | 之后设置 |构建、执行、部署 |构建工具 |摇篮 | Runner => 将 IDE 构建/运行操作委托给 gradle 我得到了更好的结果。也许不适合所有人,但可能是许多人的方式。
    【解决方案3】:

    这是我的理解:

    基本上,这是解决两者之间不兼容问题的解决方法 Gradle build pathIDEA output path

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多