Spring 使用 thymeleaf starter 启动将 javassist 从其他依赖项中排除

Spring boot with thymeleaf starter excludes javassist from other dependencies

我有 2 个项目,第一个项目依赖于 javassist,第二个项目依赖于第一个项目和 spring-boot-starter-thymeleaf。

构建 gradle 如下所示 第一个项目

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'
}

第二个项目如下,:bar:hoge是第一个项目

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' 或从第二个项目中删除 implementation 'org.springframework.boot:spring-boot-starter-thymeleaf',那么相同的命令将 return 如下所示

org.javassist:javassist:3.27.0-GA
\--- project :bar:hoge
     \--- runtimeClasspath

并且gradlew assemblejar有javassist。

有什么想法吗?现在我需要在第二个项目中明确添加 javassist 依赖项来解决它。 工作项目 https://github.com/kojilin/example-multi

如果你想自动继承:bar:hogejavassist依赖,声明为api,而不是implementation

也许原因就出在这里?

https://github.com/gradle/gradle/issues/1473#issuecomment-413333723

所以如果我申请了

dependencyManagement {
    applyMavenExclusions = false
}

它将在 runtimeClasspath 中保留库。