zoukankan      html  css  js  c++  java
  • Spring IO Platform简介及示例

    什么是Spring IO Platform

    Spring IO Platform,简单的可以认为是一个依赖维护平台,该平台将相关依赖汇聚到一起,针对每个依赖,都提供了一个版本号;

    这些版本对应的依赖都是经过测试的,可以保证一起正常使用。

    为什么要使用Spring IO Platform

    主要是解决依赖版本冲突问题,例如在使用Spring的时候,经常会使用到第三方库,一般大家都是根据经验挑选一个版本号或挑选最新的,随意性较大,其实这是有问题的,除非做过完整的测试,保证集成该版本的依赖不会出现问题,且后续集成其它第三方库的时候也不会出现问题,否则风险较大,且后续扩展会越来越困难,因为随着业务复杂度的增加,集成的第三方组件会越来会多,依赖之间的关联也会也来越复杂。

    好消息是,Spring IO Platform能很好地解决这些问题,我们在添加第三方依赖的时候,不需要写版本号,它能够自动帮我们挑选一个最优的版本,保证最大限度的扩展,而且该版本的依赖是经过测试的,可以完美的与其它组件结合使用。

    Spring IO Platform中维护了哪些依赖

    详细的就不列了,太多了,我这里截张图示意下,如果你使用到以下依赖的话,那么可以不用声明版本号:

    完整的依赖列表请参考如下链接:

    http://docs.spring.io/platform/docs/current/reference/html/appendix-dependency-versions.html

    如何使用Spring IO Platform

    Spring IO Platform主要是与依赖管理系统结合一起使用的,例如,可以完美的支持Maven和Gradle;

    下面,我们就分别来了解下在Maven和Gradle中如何使用Spring IO Platform;

    在Maven中使用Spring IO Platform

    有两种方式,一种是使用import导入,另一种是继承parent:

    import方式:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.example</groupId>
        <artifactId>your-application</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>io.spring.platform</groupId>
                    <artifactId>platform-bom</artifactId>
                    <version>Athens-SR2</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement><!-- Add Spring repositories -->
        <!-- (you don't need this if you are using a .RELEASE version) -->
        <repositories>
        </repositories>
    
        <pluginRepositories>
        </pluginRepositories>
    </project>

    继承parent:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.example</groupId>
        <artifactId>your-application</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    
        <parent>
            <groupId>io.spring.platform</groupId>
            <artifactId>platform-bom</artifactId>
            <version>Athens-SR2</version>
            <relativePath/>
        </parent><!-- Add Spring repositories -->
        <!-- (you don't need this if you are using a .RELEASE version) -->
        <repositories>
        </repositories>
    
        <pluginRepositories>
        </pluginRepositories>
    </project>

    使用继承的话,除了从父pom中引入Spring IO Platform之外,我们的应用还会引入一些插件管理的配置,如Spring Boot的Maven插件,我们可以利用这一点,然后只需要在<plugins>代码块中添加如下代码即可使用插件:

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    另外,使用继承的话,还可以直接覆盖父类提供的依赖版本号,如下所示:

    <properties>
        <foo.version>1.1.0.RELEASE</foo.version>
    </properties>

    如果你想结合Spring IO Platform和Spring Boot一起使用的话,并不是一定要继承Spring IO Platform POM,可以选择使用导入的方式,然后自己将剩下的配置添加到POM里即可。有兴趣可以参考Spring Boot参考指南的这一章节 using-boot-maven,会讲述如何不用继承方式来使用Spring Boot.

    最后,要说的是,无论你使用哪种方式,都不会有任何依赖添加进来;

    当你想在自己的pom里添加了一个属于Spring IO Platform中的依赖的时候,可以直接省略版本号,如下所示:

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
        </dependency>
    </dependencies>

    在Gradle中使用Spring IO Platform

    如下所示,我们会应用io.spring.dependency-management这个插件,然后在dependencyManagement中导入bom。

    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            classpath 'io.spring.gradle:dependency-management-plugin:0.6.0.RELEASE'
        }
    }
    
    apply plugin: 'io.spring.dependency-management'
    
    repositories {
        mavenCentral()
    }
    
    dependencyManagement {
        imports {
            mavenBom 'io.spring.platform:platform-bom:Athens-SR2'
        }
    }

    当需要添加一个属于Spring IO Platform中的依赖的时候,写法与Maven类似,可以省略版本号,如下所示:

    dependencies {
        compile 'org.springframework:spring-core'
    }

    一个完整的示例,基于Maven, 结合Spring Boot

     示例的Pom文件如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.example</groupId>
        <artifactId>helloworld</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    
       <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>io.spring.platform</groupId>
                    <artifactId>platform-bom</artifactId>
                    <version>Athens-SR2</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                
                <dependency>
                    <!-- Import dependency management from Spring Boot -->
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-dependencies</artifactId>
                    <version>1.4.3.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
        
        <!-- Additional lines to be added here... -->
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>com.google.code.gson</groupId>
                <artifactId>gson</artifactId>
            </dependency>
        </dependencies>
        
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>1.4.3.RELEASE</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    
    </project>

    有几点注意,这里我们没有继承Spring Boot的父Pom,也没继承Spring IO Platform的父POM,都是选择导入的方式,所以使用spring-boot-maven-plugin插件的时候,就不能像上一篇那样自动继承父POM的配置了,需要自己添加配置,绑定repackage Goal;

    另外,想你想要修改依赖版本号的时候,由于不是继承,所以不能使用直接覆盖properties属性的方法,其实也很简单,如果不想继承Spring IO Platform中的依赖版本号的话,自己直接写上版本号即可,Spring Boot的话,可采用如下方式,来对Spring Data release train进行升级(注意要放在spring-boot-dependencies的前面):

    
    
    <dependencyManagement>
        <dependencies>
            <!-- Override Spring Data release train provided by Spring Boot -->
            <dependency>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-releasetrain</artifactId>
                <version>Fowler-SR2</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>1.4.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    最后,我们使用Gson库做个测试,现在maven repository中维护的gson的最新版本是2.8,Spring IO Platform中维护的版本是2.7(有兴趣可查阅appendix确认)。

    然后当我们开始构建项目的时候,发现下载的gson版本确实是2.7。

    示例源码

     https://github.com/peterchenhdu/helloworld

    参考资料

    http://docs.spring.io/platform/docs/2.0.8.RELEASE/reference/htmlsingle/

  • 相关阅读:
    数据绑定表达式语法(Eval,Bind区别)
    使用博客园的第一件事 自定义主题
    sql2000 跨服务器复制表数据
    使用UpdatePanel 局部刷新出现中文乱码的解决方法!!
    MMC不能打开文件MSC文件
    sql 日期 、时间相关
    loaded AS2 swf call function in AS3 holder
    Rewrite the master page form action attribute in asp.net 2.0
    100万个不重复的8位的随机数
    flash 中实现斜切变型
  • 原文地址:https://www.cnblogs.com/chenpi/p/6295855.html
Copyright © 2011-2022 走看看