Вопрос или проблема
После обновления версии Micronaut с 3.4.2 до 4.4.2 у меня возникла следующая проблема при попытке перезагрузить Gradle: Не удалось найти io.micronaut.platform:micronaut-platform:3.9.0.
Модуль io.micronaut.platform:micronaut-platform не входил в старый build.gradle и не входит в новый, поэтому я не понимаю, почему Gradle пытается его найти?
Вот старый gradle:
gradle.properties:
micronautVersion=3.4.2
build.gradle:
plugins {
id("com.github.johnrengelman.shadow") version "7.1.2"
id("io.micronaut.application") version "3.3.2"
id "com.gorylenko.gradle-git-properties" version "2.3.2"
}
dependencies {
annotationProcessor("io.micronaut:micronaut-http-validation")
annotationProcessor("io.micronaut.openapi:micronaut-openapi")
annotationProcessor("io.micronaut.data:micronaut-data-hibernate-jpa")
annotationProcessor("io.micronaut.data:micronaut-data-processor")
implementation("io.swagger.core.v3:swagger-annotations")
implementation("io.micronaut.flyway:micronaut-flyway")
implementation("io.micronaut:micronaut-http-client")
implementation("io.micronaut:micronaut-jackson-databind")
implementation("io.micronaut:micronaut-runtime")
implementation("io.micronaut.data:micronaut-data-hibernate-jpa")
implementation("io.micronaut.sql:micronaut-hibernate-jpa")
implementation("io.micronaut.sql:micronaut-jdbc-hikari")
implementation("jakarta.annotation:jakarta.annotation-api")
implementation('jakarta.persistence:jakarta.persistence-api:3.1.0')
implementation("io.micronaut:micronaut-validation")
runtimeOnly("ch.qos.logback:logback-classic")
runtimeOnly("org.postgresql:postgresql")
compileOnly("org.graalvm.nativeimage:svm")
testRuntimeOnly("com.h2database:h2:2.2.224")
implementation("com.google.code.findbugs:jsr305:3.0.2")
// тест!
testImplementation('org.mockito:mockito-core:5.12.0')
testImplementation('org.mockito:mockito-inline:5.2.0')
testImplementation('org.mockftpserver:MockFtpServer:3.1.0')
testImplementation('org.junit.jupiter:junit-jupiter-api:5.11.0')
// связывание данных
implementation('org.json:json:20231013')
// mapstruct
annotationProcessor('org.mapstruct:mapstruct-processor:1.5.5.Final')
implementation("org.mapstruct:mapstruct:1.5.5.Final")
implementation('org.mapstruct:mapstruct-jdk8:1.5.5.Final')
implementation('org.mapstruct:mapstruct-processor:1.5.5.Final')
// метрики
implementation("io.micronaut.micrometer:micronaut-micrometer-core")
// micrometer-registry-statsd также подтягивает micrometer-core, поэтому включен выше для подробного примера
implementation("io.micronaut.micrometer:micronaut-micrometer-registry-statsd")
// Также необходимо для включения конечной точки
implementation("io.micronaut:micronaut-management")
}
Вот новый gradle:
gradle.properties:
micronautVersion=4.4.2
build.gradle:
plugins {
id("com.github.johnrengelman.shadow") version "8.1.1"
id("io.micronaut.application") version "4.4.2"
id("io.micronaut.aot") version "4.4.2"
id 'io.micronaut.library' version '4.4.2'
}
dependencies {
annotationProcessor("io.micronaut:micronaut-http-validation")
annotationProcessor("io.micronaut.serde:micronaut-serde-processor")
compileOnly("io.micronaut:micronaut-http-client")
runtimeOnly("ch.qos.logback:logback-classic")
testImplementation("io.micronaut:micronaut-http-client")
annotationProcessor("io.micronaut:micronaut-http-validation")
annotationProcessor("io.micronaut.openapi:micronaut-openapi")
annotationProcessor("io.micronaut.data:micronaut-data-hibernate-jpa")
annotationProcessor("io.micronaut.data:micronaut-data-processor")
implementation("io.swagger.core.v3:swagger-annotations:2.2.22")
implementation("io.micronaut.flyway:micronaut-flyway:7.4.0")
implementation("io.micronaut:micronaut-http-client")
implementation("io.micronaut:micronaut-jackson-databind")
implementation("io.micronaut.data:micronaut-data-hibernate-jpa:4.9.3")
implementation("io.micronaut.sql:micronaut-hibernate-jpa")
implementation("io.micronaut.sql:micronaut-jdbc-hikari:5.8.2")
implementation("jakarta.annotation:jakarta.annotation-api")
implementation('jakarta.persistence:jakarta.persistence-api:3.1.0')
annotationProcessor("io.micronaut.validation:micronaut-validation-processor")
implementation("io.micronaut.validation:micronaut-validation")
implementation("io.micronaut:micronaut-inject")
runtimeOnly("ch.qos.logback:logback-classic:1.5.8")
runtimeOnly("org.postgresql:postgresql:42.7.4")
testRuntimeOnly("com.h2database:h2:2.2.224")
implementation("com.google.code.findbugs:jsr305:3.0.2")
// тест
testImplementation('org.mockito:mockito-core:5.12.0')
testImplementation('org.mockito:mockito-inline:5.2.0')
testImplementation('org.mockftpserver:MockFtpServer:3.1.0')
testImplementation('org.junit.jupiter:junit-jupiter-api:5.11.0')
testImplementation("io.micronaut.test:micronaut-test-junit5")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
// связывание данных
implementation('org.json:json:20231013')
// mapstruct
annotationProcessor('org.mapstruct:mapstruct-processor:1.5.5.Final')
implementation("org.mapstruct:mapstruct:1.5.5.Final")
implementation('org.mapstruct:mapstruct-jdk8:1.5.5.Final')
implementation('org.mapstruct:mapstruct-processor:1.5.5.Final')
// метрики
implementation("io.micronaut.micrometer:micronaut-micrometer-core:5.8.0")
// micrometer-registry-statsd также подтягивает micrometer-core, поэтому включен выше для подробного примера
implementation("io.micronaut.micrometer:micronaut-micrometer-registry-statsd:5.8.0")
// Также необходимо для включения конечной точки
implementation("io.micronaut:micronaut-management:4.6.5")
}
Из документации по миграции Micronaut до версии 4 (https://micronaut.io/2023/05/09/upgrade-to-micronaut-framework-4-0-0/), я понимаю, что нет необходимости импортировать этот модуль, но даже его импорт не решает проблему:
implementation("io.micronaut.platform:micronaut-platform:4.4.2")
Я также пробовал обновить Java (с 17 до 21) и Gradle (с 7.X до 8.X) без успеха.
Заранее спасибо за вашу помощь,
Ответ или решение
Проблема, с которой вы столкнулись, связана с миграцией проекта Micronaut с версии 3.4.2 на 4.4.2. Судя по вашему описанию, Gradle пытается найти зависимость io.micronaut.platform:micronaut-platform:3.9.0
, хотя ни в одном из ваших build.gradle
файлов эта зависимость не указана.
Причины проблемы
-
Глобальные зависимости: Убедитесь, что в других частях вашего проекта или в настройках Gradle не указываются глобальные зависимости, которые могут прикрывать требования к этой версии.
-
Кеширование Gradle: Иногда после обновления версии могут возникать проблемы из-за кешированной информации. Попробуйте выполнить команду:
./gradlew clean build --refresh-dependencies
Это очистит кеш Gradle и загрузит все зависимости заново.
- Совместимость зависимостей: Некоторые зависимости, указанные в вашем
build.gradle
, могут требовать более старую версию Micronaut. Проверьте совместимость всех используемых библиотек с новой версией Micronaut 4.4.2. Возможные конфликты могут возникать, из-за несовместимости версий.
Решения
-
Удалите неявные зависимости: Если у вас есть зависимости, которые, как вы знаете, не использовались в предыдущей версии (например,
micronaut-platform:3.9.0
), попробуйте явно исключить их. Например, еслиmicronaut-http-client
включает в себя не нужную зависимость:implementation("io.micronaut:micronaut-http-client") { exclude group: 'io.micronaut.platform', module: 'micronaut-platform' }
-
Добавьте правильную зависимость: Если вам все равно нужна зависимость
micronaut-platform
, убедитесь, что вы добавляете именно ту, которая соответствует вашей версии, например:implementation("io.micronaut.platform:micronaut-platform:4.4.2")
Но, как вы упомянули, это не решает проблему, поэтому следите за возможностью добавления или исключения других зависимостей.
-
Проверка конфигураций: Убедитесь, что у вас нет старых Gradle файлов или конфигураций, которые могут конфликтовать с новыми настройками (файлы, такие как
settings.gradle
, могут содержать дополнительные конфигурации). - Обновление Java: Если вы подняли уровень Java с 17 до 21, убедитесь, что все зависимости совместимы с этой версией Java. Некоторые старые библиотеки могут не поддерживать новые версии Java.
Заключение
Обязательно проверяйте совместимость всех зависимостей и обновляйте их по мере необходимости. Если проблема продолжается, рекомендуется создать минимальный пример проекта с упрощенной конфигурацией и постепенно добавлять зависимости, чтобы выявить конфликт. Вы также можете обратиться к сообществу Micronaut или создать issue в репозитории GitHub, если проблема остается нерешенной.
Надеюсь, приведенные советы помогут вам решить вашу проблему.