【问题标题】:Spring boot with thymeleaf starter excludes javassist from other dependencies带有 thymeleaf 启动器的 Spring Boot 将 javassist 从其他依赖项中排除
【发布时间】:2020-12-19 06:29:41
【问题描述】:

我有 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',那么相同的命令将返回如下所示

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

gradlew assemble jar 有 javassist。

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

【问题讨论】:

  • 我收到了关于javassist 的消息,但是您有什么问题需要帮助?
  • 对我来说很奇怪,我需要在第二个项目中添加 javassist 依赖项。所以我想知道为什么会这样。

标签: spring-boot gradle spring-boot-starter


【解决方案1】:

如果您想从:bar:hoge 自动继承javassist 依赖项,请将其声明为api,而不是implementation

【讨论】:

  • 我的想法是不暴露 javassist api。如果foo:bar 依赖于:bar:hoge 并且:bar:hoge 依赖于(eve 使用实现)在 javassist 上,那么最终的 jar(runtimeClasspath)应该有 javassist 吗?
  • @kojilin 一旦你说“我需要在第二个项目中添加 javassist 依赖项对我来说很奇怪。”,然后你说“我的想法不是公开 javassist api”。下定决心。
  • 我不明白,但感谢您的评论。如果我在第一个项目中添加implementation 'com.google.guava:guava:29.0-jre',即使我没有在第二个项目中添加,在第二个项目的 runtimeClasspath 中我们仍然可以看到番石榴。
【解决方案2】:

也许原因来自这里?

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

如果我申请了

dependencyManagement {
    applyMavenExclusions = false
}

它将库保存在 runtimeClasspath 中。

【讨论】:

    猜你喜欢
    • 2021-08-26
    • 1970-01-01
    • 2017-11-11
    • 2017-07-05
    • 2016-08-19
    • 2020-10-07
    • 2018-07-04
    • 2019-07-26
    • 2018-12-16
    相关资源
    最近更新 更多