#spring-boot #gradle #spring-boot-starter
#spring-boot #градация #spring-boot-starter #gradle
Вопрос:
У меня есть 2 проекта, 1-й проект зависит от javassist
, а 2-й проект зависит от 1-го и spring-boot-starter-thymeleaf.
Сборка gradle похожа на приведенный ниже 1-й проект
plugins {
id 'org.springframework.boot' version '2.3.3.RELEASE'
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
implementation 'org.javassist:javassist:3.27.0-GA'
testCompile group: 'junit', name: 'junit', version: '4.12'
}
2-й проект, как показано ниже, :bar:hoge
является 1-м проектом.
plugins {
id 'org.springframework.boot' version '2.3.3.RELEASE'
id 'io.spring.dependency-management' version '1.0.10.RELEASE'
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
implementation project(':bar:hoge')
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
testCompile group: 'junit', name: 'junit', version: '4.12'
}
bootJar {
mainClassName = 'com.example.koji.Main'
}
Если я запущу ../gradlew dependencyInsight --dependency javassist --configuration runtimeClasspath
, результат будет таким, как показано ниже.
No dependencies matching given input were found in configuration ':foo:bar:runtimeClasspath'
И gradlew assemble
не имеет javassist.
Но если я удалю его id 'org.springframework.boot' version '2.3.3.RELEASE'
из 1-го проекта или implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
из 2-го проекта, то вернется та же команда, что и ниже
org.javassist:javassist:3.27.0-GA
--- project :bar:hoge
--- runtimeClasspath
И gradlew assemble
в jar есть javassist.
Есть идеи? Теперь мне нужно явно добавить зависимость javassist во 2-й проект, чтобы решить ее. Рабочий проект https://github.com/kojilin/example-multi
Комментарии:
1. Я получил рассказ о
javassist
, но с какой проблемой вам нужна помощь?2. Для меня странно, что мне нужно добавить зависимость javassist во 2-м проекте. Итак, я хочу знать, почему это произошло.
Ответ №1:
Может быть, причина кроется отсюда?
https://github.com/gradle/gradle/issues/1473#issuecomment-413333723
итак, если я применил
dependencyManagement {
applyMavenExclusions = false
}
Это сохранит библиотеку в runtimeClasspath.
Ответ №2:
Если вы хотите автоматически наследовать javassist
зависимость от :bar:hoge
, объявите ее как api, а не implementation
.
Комментарии:
1. Моя идея не в том, чтобы предоставлять javassist api. Если
foo:bar
зависит от:bar:hoge
и:bar:hoge
зависит (реализация использования eve) от javassist, должен ли конечный jar (runtimeClasspath) иметь javassist ?2. @kojilin Однажды вы сказали: » Для меня странно, что мне нужно добавить зависимость javassist во 2-м проекте. «, затем вы говорите: » Моя идея — не раскрывать javassist api «. Решайтесь.
3. Я не понимаю, но спасибо за ваш комментарий. Если я добавляю
implementation 'com.google.guava:guava:29.0-jre'
в 1-й проект, даже если я не добавляю во 2-й проект, в runtimeClasspath 2-го проекта мы все еще можем видеть guava.