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

时间:2015-08-17 03:40:59

标签: spring maven spring-boot

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

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

  1. 在库中,将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>
    ...
    
  2. 在应用程序中,提到实际的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>
     ...
    
  3. 当我使用此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时,它可以正常工作。

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

1 个答案:

答案 0 :(得分:2)

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

如果用户没有做任何事情而只是导入您的图书馆,那么他将获得1.3.0.M1,因为默认情况下这是可用的。

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

换句话说,用户必须指定他想要使用的库的版本;作为一名图书馆开发人员,你无法做任何事情。

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