Проверьте мой ответ на ваш предыдущий вопрос . Это должно дать вам представление о том, как структурировать и объявить многомодульные проекты Gradle.
Я думаю, что когда вы добавляете зависимость от модуля с IntelliJ, он просто добавляет ее в структуру проекта через настройки проекта в IntelliJ. И позже, когда вы нажимаете refre sh, IntelliJ настраивает проект на основе файлов Gradle.
Чтобы это работало, родительский проект также должен быть проектом Gradle. Если это не просто добавить build.gradle
и settings.gradle
в родительский каталог.
Затем в settings.gradle
добавить подпроекты, такие как:
rootProject.name = 'Parend'
include('common') //this adds the module
include('client')
include('service')
И позже, в build.gradle
файлах Модули client
и service
добавляют модуль common
как зависимость с:
dependencies {
implementation project(':common')
//...
}
Если вы собираетесь больше работать с Gradle, вы можете взглянуть на эту статью об общем понимании Gradle.
Редактировать:
(я понял, что при использовании implementation
он не выдает ошибок)
Для работы с многомодульным проектом с Gradle, Проект root также должен быть проектом Gradle. root может содержать или не содержать какой-либо исходный код, но он должен иметь свои собственные файлы Gradle.
Поэтому, если структура вашего проекта должна выглядеть следующим образом:
Root project 'parent'
+--- Project ':client'
+--- Project ':common'
\--- Project ':service'
Тогда parent
и проекты субмодулей должны быть установлены как проекты Gradle. Для этого в проекте parent
должен быть как минимум файл settings.gradle
и объявленные включения для подмодулей, аналогично:
rootProject.name = 'parent'
include 'common'
include 'client'
include 'service'
Каждый из модулей (client
, common
, * 1041) *) должен иметь build.gradle
файлов в своем каталоге. Подмодули, использующие common
, поэтому service
и client
должны добавить common
в качестве зависимости в свои собственные build.gradle
файлы, например:
dependencies {
implementation project(':common')
//and rest of required dependencies
//testCompile group: 'junit', name: 'junit', version: '4.12'
}
Тогда вы сможете импортировать publi c классов из common
в этих подмодулях и пересобрать или заново импортировать проект без ошибок.
Поскольку проект parent
не содержит никакого исходного кода, ему не нужен собственный скрипт сборки, но затем файл сборки всех подмодулей должен объявить плагин java сверху файла сборки:
plugins {
id 'java'
}
Поскольку вы работаете с IntelliJ, и ваш проект ранее мог иметь другую структуру, тогда структура проекта в настройке IntelliJ может быть испорчена.
Чтобы исправить это, вы можете go в Файл-> Структура проекта-> Модули и снова удалите / импортируйте родительский модуль.
Если у вас сейчас не так много классов, я бы порекомендовал вам создать новый проект. В окне «Новый проект» выберите Gradle и снимите флажок Java в «Дополнительные библиотеки и фреймворки». Это создаст пустой проект Gradle.
После того, как проект будет сгенерирован, щелкните правой кнопкой мыши на parent
и выберите New-> Module. В новом окне модуля снова выберите Gradle и оставьте отмеченным Java (поскольку подмодули будут содержать исходный код).
При этом IntelliJ автоматически включит созданный модуль в файл settings.gradle
корневого / родительского проекта и файл сборки этого модуля будет содержать базовую конфигурацию c (например, плагин java).
Но вы все равно добавите зависимость одного модуля в другой в файле build.gradle
этого модуля.