Почему gradle удаляет зависимость при создании проекта - PullRequest
1 голос
/ 14 марта 2020

Понятия не имею, почему Gradle делает это со мной. У меня есть мультипроект, который выглядит следующим образом:

|Parent
 |client
 |common
 |service

Родитель - это просто пустой проект и клиент, общие и сервисные - это проекты java: у меня есть некоторые классы, которые используются как в клиенте, так и в сервисе, поэтому я хотел создать общий проект и создать флягу, которую позже использовал бы и в сервисе, и в клиенте. Я могу создать общий jar, но всякий раз, когда я пытаюсь сделать «добавить зависимость от общего», а затем попытаться «refre sh gradle», он удаляет зависимость и не в состоянии построить!
Это то, что я делаю: enter image description here

Затем я нажимаю это, потому что хочу построить: enter image description here

И это просто удаляет зависимость !!!

enter image description here

Это файл build.gradle из клиентского проекта:

plugins {
id 'org.springframework.boot' version '2.2.5.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
}

group = 'sot.rest'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'org.springframework', name: 'spring-web', version: '5.2.4.RELEASE'
    implementation 'org.springframework.boot:spring-boot-starter'
    // https://mvnrepository.com/artifact/com.google.code.gson/gson
    compile group: 'com.google.code.gson', name: 'gson', version: '2.8.6'
}

Пожалуйста, помогите, я в отчаянии !!

1 Ответ

2 голосов
/ 14 марта 2020

Проверьте мой ответ на ваш предыдущий вопрос . Это должно дать вам представление о том, как структурировать и объявить многомодульные проекты 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 этого модуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...