gpt4 book ai didi

spring - 如何避免将特定版本的 Spring Boot 放入库中

转载 作者:行者123 更新时间:2023-12-04 21:12:21 37 4
gpt4 key购买 nike

我正在开发一个基于 Spring Boot 的库,它可以在多个 Spring Boot 应用程序中使用。该库应该与 Spring Boot 一起使用 1.3.0.M1向前。

我在想如何避免将特定版本的 Spring JAR 放入其中,而是让应用程序指定确切版本。目前我已经提出了这个解决方案,除了某些组合外,它似乎有效:

  • 在库中,将 Spring Boot 版本设为 1.3.0.M1 ,并将所有依赖项的范围设为 provided .像这样:
    ...
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.0.M1</version>
    <relativePath/>
    </parent>

    <dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <scope>provided</scope>
    </dependency>
    ...
  • 在应用程序中,提及实际的 Spring Boot 版本,例如1.3.0.M3 ,并重新包含所有依赖项,如下所示:
    ...
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.0.M3</version>
    <relativePath/>
    </parent>

    <dependencies>

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    ...

  • 当我用这个 1.3.0.M1 运行应用程序时+ 1.3.0.M3特定组合,我收到此错误,我认为这只是一些兼容性问题:
    Exception in thread "main" java.lang.NoSuchMethodError: org.springframework.core.ResolvableType.forInstance(Ljava/lang/Object;)Lorg/springframework/core/ResolvableType;

    但是,尝试稳定版本,例如当我将 lib 版本设置为 1.2.0.RELEASE 时和应用程序版本为 1.2.5.RELEASE , 有用。

    所以,我想知道这是否是处理这种情况的正确方法,或者有更好的方法。

    最佳答案

    您正在混合可选依赖项和依赖项管理。如果您的库需要 Spring Boot 运行,那么您必须使用默认范围指定依赖项。

    如果用户什么都不做,只是导入你的库,那么他会得到 1.3.0.M1因为这是默认情况下可用的。

    如果您现在从 start.spring.io 创建一个项目,例如使用 1.3.0.M3并将您的库添加到其中,您将看到该项目正在使用 1.3.0.M3 .这是因为该项目有一个依赖管理部分,强制使用 Spring Boot 1.3.0.M3 .

    换句话说,用户必须指定他想要使用哪个版本的库;作为库开发人员,您无能为力。

    关于错误,无法弄清楚您在做什么,但我最好的猜测是您正试图用不兼容的版本覆盖 Spring 框架和 Spring boot。您可能需要查看并更好地了解什么是依赖项管理。 This question是一个很好的起点。

    关于spring - 如何避免将特定版本的 Spring Boot 放入库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32042450/

    37 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com