Сборка с помощью Intellij 2017.2 / out каталог дублирует файлы в каталоге / build

После обновления до Intellij 2017.2 при сборке моего проекта создается каталог /out, содержащий сгенерированные исходные файлы и файлы ресурсов. Эти файлы дублируют файлы, которые уже содержатся в /build, и приводят к duplicate class ошибкам компилятора для сгенерированных классов. Любые идеи по исправлению, которое мне нужно в Gradle или IntelliJ?


person Peter    schedule 18.07.2017    source источник


Ответы (3)


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: File | Настройки | Сборка, выполнение, развертывание | Инструменты сборки | Gradle | Runner => Делегировать действия сборки / запуска IDE для gradle.

person CrazyCoder    schedule 04.09.2017
comment
В этом другом ответе вы говорите не использовать плагин idea. Что он? stackoverflow.com / questions / 42499617 / - person JackB; 31.10.2017
comment
@JackB не путает gradle idea командную строку, которая генерирует проект, и idea плагин, который используется, когда IntelliJ IDEA импортирует проект, они не связаны и создают разные файлы проекта. - person CrazyCoder; 31.10.2017
comment
Однако делегирование действий сборки / запуска IDE в gradle происходит намного медленнее. :( - person Michael L; 19.12.2017
comment
Весь смысл использования IDE со сценарием вроде Gradle или Maven заключался в том, что среда IDE могла подбирать сценарии gradle и быстро создавать проект с минимальными усилиями. Но если вам каждый раз приходится создавать скрипт gradle, все ваши действия становятся медленными. Мне очень жаль, вы делаете бесполезным очень полезный инструмент. - person Ikthiander; 09.10.2018
comment
@Ikthiander, вам не нужно делегировать сборку Gradle, это всего лишь один из вариантов. По умолчанию сборка выполняется IntelliJ IDEA и обычно быстрее, чем Gradle. - person CrazyCoder; 09.10.2018
comment
Теперь у вас есть две папки вывода. Скрипт сам соберет все в папку сборки. Поэтому, если вы хотите, чтобы некоторые методы генерировали некоторые классы java с использованием gradle, они всегда будут генерироваться в папке сборки. И ide в папке out. Вы не можете вручную сделать это исходной папкой, так как каждая сборка gradle сбрасывает ваши пользовательские настройки. Ide компилирует только явные исходные наборы, сгенерированные наборы даже не доступны для просмотра или перемещения. Раньше, в 2017 году, по крайней мере, я мог добавить фальшивый источник как build / classes / ... И ide нашел бы его, теперь его больше не будет. Это превращается в беспорядок. - person Ikthiander; 10.10.2018
comment
Проблема с этим заключается в том, что IntelliJ не выполняет фильтрацию ресурсов, поэтому запуск, скажем, весенняя загрузка с resourceFiltering для файлов yml, завершается неудачно, поскольку токены не заменяются на IntelliJ. - person aorticDefiance; 15.11.2018
comment
@aorticDefiance В вашем случае я думаю, что Delegate IDE build/run actions to gradle. - лучший вариант. - person wonsuc; 14.03.2019

Файл | Структура проекта | Настройки проекта | Модули | Вкладка "Пути" | Вывод компилятора

Выберите «Наследовать выходной путь компиляции проекта», чтобы продолжить использование /build для артефактов сборки.

person Peter    schedule 18.07.2017
comment
Но как только вы запустите gradle build, каталог сборки вернется со всеми его дубликатами. - person Clashsoft; 18.07.2017
comment
IntelliJ IDEA больше не передает выходные данные Gradle, см. youtrack.jetbrains.com/issue/IDEA -175172, чтобы узнать подробности. - person CrazyCoder; 18.07.2017
comment
@CrazyCoder, спасибо за интересную ссылку на проблему youtrack. Обсуждение там предлагает (среди прочего) попробовать делегировать сборку / запуск IDEA в Gradle. У меня были аналогичные проблемы с повторяющейся (но другой) структурой каталога out, но после установки File | Настройки | Сборка, выполнение, развертывание | Инструменты сборки | Gradle | Runner = ›Делегировать действия сборки / запуска IDE для gradle Я получил гораздо лучшие результаты. Может быть, не для всех, но может быть для многих. - person virgo47; 03.09.2017

Вот мое понимание:

По сути, это решение проблемы несовместимости между Gradle build path и IDEA output path.

person leo    schedule 22.05.2019