当前位置: 首页 > 知识库问答 >
问题:

如何配置 Gradle Java 平台以首选更高的依赖项版本?

公西姚石
2023-03-14

我得到以下错误在我的Spring启动gradle多模块项目。

Dependency resolution failed because of conflict(s) on the following module(s):
   - org.javassist:javassist between versions 3.24.0-GA and 3.20.0-GA

根本原因是< code > spring-boot-starter-data-JPA 过渡依赖于3.24.0-GA,而< code > spring-boot-starter-thyme leaf 过渡依赖于3.20.0-GA。我使用的是Gradle Java平台Pulgin,而不是Spring Boot Gradle插件。

问题:

  • 如何配置Gradle Java Platform以选择更高的依赖性版本?我想集中解决冲突,而不是在每个项目中

Gradle平台项目

plugins {
    `java-platform`
}

javaPlatform {
    allowDependencies()
}

dependencies {
    api(enforcedPlatform("org.springframework.boot:spring-boot-dependencies:2.2.5.RELEASE"))
    constraints {
        api(project(":core"))
        api(project(":email"))
        api(project(":security"))
        api(project(":app"))
        api("com.github.bbottema:emailaddress-rfc2822:2.1.4")
        api("com.icegreen:greenmail:1.5.11")
        api("nl.jqno.equalsverifier:equalsverifier:3.1.12")
        api("com.google.guava:guava:28.2-jre")
    }
}

安全模块梯度项目

plugins {
    `java-library-conventions`
}

dependencies {
    implementation(project(":core"))
    implementation(project(":email"))
    implementation("org.springframework.boot:spring-boot-starter-security")
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("org.springframework.boot:spring-boot-starter-thymeleaf")

    testImplementation(testFixtures(project(":core")))
    testImplementation(testFixtures(project(":email")))
}

完整的依赖性洞察报告

./gradlew :security:dependencyInsight --configuration compileClasspath --dependency org.javassist:javassist

> Task :security:dependencyInsight
Dependency resolution failed because of conflict(s) on the following module(s):
   - org.javassist:javassist between versions 3.24.0-GA and 3.20.0-GA

org.javassist:javassist:3.24.0-GA
   variant "compile" [
      org.gradle.status              = release (not requested)
      org.gradle.usage               = java-api
      org.gradle.libraryelements     = jar (compatible with: classes)
      org.gradle.category            = library

      Requested attributes not found in the selected variant:
         org.gradle.dependency.bundling = external
         org.gradle.jvm.version         = 11
   ]
   Selection reasons:
      - By conflict resolution : between versions 3.24.0-GA and 3.20.0-GA

org.javassist:javassist:3.24.0-GA
\--- org.hibernate:hibernate-core:5.4.12.Final
     +--- org.springframework.boot:spring-boot-dependencies:2.2.5.RELEASE
     |    \--- project :platform
     |         \--- compileClasspath
     \--- org.springframework.boot:spring-boot-starter-data-jpa:2.2.5.RELEASE
          +--- compileClasspath (requested org.springframework.boot:spring-boot-starter-data-jpa)
          \--- org.springframework.boot:spring-boot-dependencies:2.2.5.RELEASE (*)

org.javassist:javassist:3.20.0-GA -> 3.24.0-GA
\--- ognl:ognl:3.1.12
     \--- org.thymeleaf:thymeleaf:3.0.11.RELEASE
          +--- org.springframework.boot:spring-boot-dependencies:2.2.5.RELEASE
          |    \--- project :platform
          |         \--- compileClasspath
          +--- org.thymeleaf:thymeleaf-spring5:3.0.11.RELEASE
          |    +--- org.springframework.boot:spring-boot-dependencies:2.2.5.RELEASE (*)
          |    \--- org.springframework.boot:spring-boot-starter-thymeleaf:2.2.5.RELEASE
          |         +--- compileClasspath (requested org.springframework.boot:spring-boot-starter-thymeleaf)
          |         \--- org.springframework.boot:spring-boot-dependencies:2.2.5.RELEASE (*)
          \--- org.thymeleaf.extras:thymeleaf-extras-java8time:3.0.4.RELEASE
               +--- org.springframework.boot:spring-boot-dependencies:2.2.5.RELEASE (*)
               \--- org.springframework.boot:spring-boot-starter-thymeleaf:2.2.5.RELEASE (*)

(*) - dependencies omitted (listed previously)

A web-based, searchable dependency report is available by adding the --scan option.

BUILD SUCCESSFUL in 757ms
1 actionable task: 1 executed

共有1个答案

苗冯浩
2023-03-14

不幸的是,这种类型的问题无法通过GradleJava平台插件解决。该插件创建约束,帮助依赖解决过程获得所需的版本,但它并没有消除冲突解决。您得到的错误是由于冲突解决发生了。在这种情况下,您瞬时获得了冲突的依赖项。唯一的解决方案是从带来不需要的版本的一阶依赖项中排除。

为了能够控制全局排除,你必须创建一个插件来做,然后每个项目都必须应用这个插件。我们在星云分辨率规则插件中使用这种方法。不幸的是,我们的插件不支持你的用例,所以不能在这里重用。

我可能会建议停止使用Resolution战略:失败版本冲突。像Spring这样的库有许多依赖项,您可能会在其中解决冲突。您需要进行大量手动调整来解决您的项目。

 类似资料:
  • 问题内容: 我是Yeoman / Grunt / Bower的新手。我有一个定义以下依赖项的文件: bower.json 在我的html文件中,我使用的是这些库的非精简版本,这些版本是通过命令安装的 index.html 如何配置grunt,因此它将: 仅将这些js文件的缩小版本复制到构建目录 替换HTML所以它会如变更至 不使用CDN时-是否建议将所有文件与自定义应用程序脚本结合在一起? 这里正

  • 在我们的项目中,我们使用具有依赖项的库,例如: 作为安全修复的一部分,我们假设使用更高版本的依赖项。通用编解码器:通用编解码器:1.14。在不升级expo-file-system的情况下,有没有办法告诉gradle/maven我们要用一个特定版本的commons-codec:commons-codec?

  • MVNRepository通常为每个依赖项列出“版本”和“更新”。 如果我发布自己的包,如何指定“更新”版本 Maven在解决传递依赖时使用了哪个依赖项?所以如果我的包依赖于包A,它依赖于包B,版本=1.0,更新=1.1。我会得到哪个版本的B?

  • 当我运行版本:显示依赖项更新时,它将显示我的依赖项的所有最新beta/里程碑版本。我更喜欢使用“release”包。 <代码>版本:使用最新版本谈论用最新版本“替换”。但是,我更喜欢手动更新版本。 我可以运行版本插件来报告我的依赖项和插件的最新“发布”版本吗? 我指的是mvnrepository上列出的包的“类型”。组织机构

  • 我已经阅读了几十篇文章,解释了如何在PreferenceActivity中更改首选项的文本颜色。我没有偏好活动。我在res/xml中使用PreferenceFragment和PreferenceScreen 设置片段 fragment\u设置。xml 偏好。xml 我尝试将添加到中的所有首选项中,但所有文本仍然是黑色的。所有这些线程都在谈论创建一种新样式,但没有一个解释如何将其应用于首选项片段。

  • 在我的项目中,我对'org.nd4j:nd4j-native-platform:0.6.0'有依赖关系,它给我带来了传递依赖关系: gradle:org.nd4j:nd4j-native:linux-ppc64le:0.6.0 gradle:org.nd4j:nd4j-native:macosx-x86_64:0.6.0 gradle:org.nd4j:nd4j-native:windows-x8