4. Using Spring IO Platform

Spring IO Platform is primarily intended to be used with a dependency management system. It works well with both Maven and Gradle.

4.1 Using Spring IO Platform with Maven

The Platform uses Maven’s support for dependency management to provide dependency versions to your application’s build. To consume this dependency management you can import the Platform’s bom into your application’s 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>your-application</artifactId>
    <version>1.0.0-SNAPSHOT</version>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>io.spring.platform</groupId>
                <artifactId>platform-bom</artifactId>
                <version>Cairo-BUILD-SNAPSHOT</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <!-- Dependency declarations -->

    <!-- Add Spring repositories -->
    <!-- (you don't need this if you are using a -RELEASE or -SR version) -->
    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/libs-snapshot</url>
            <snapshots><enabled>true</enabled></snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/libs-snapshot</url>
            <snapshots><enabled>true</enabled></snapshots>
        </pluginRepository>
    </pluginRepositories>
</project>

Alternatively, rather than importing the Platform’s bom, you may prefer to use it as your pom’s 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>Cairo-BUILD-SNAPSHOT</version>
        <relativePath/>
    </parent>

    <!-- Dependency declarations -->

    <!-- Add Spring repositories -->
    <!-- (you don't need this if you are using a -RELEASE or -SR version) -->
    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/libs-snapshot</url>
            <snapshots><enabled>true</enabled></snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/libs-snapshot</url>
            <snapshots><enabled>true</enabled></snapshots>
        </pluginRepository>
    </pluginRepositories>
</project>

Taking this approach, in addition to the dependency management that importing the pom provides, your application will also gain some plugin management that provides sensible defaults for a number of plugins, including Spring Boot’s Maven Plugin. To take advantage of this default configuration, all you then need to do is to include the plugin in the <plugins> section of your pom:

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

By using the Platform as your pom’s parent, you will also be able to make use of the properties that it declares and to override those properties. One reason for overriding a property is to change the version of a dependency. See Section 5.1, “Overriding a version using Maven” for more information.

If you want to use the Platform and Spring Boot together, you don’t have to use the Platform’s pom as the parent. Instead, you can import the Platform’s pom as described above and then perform the rest of the configuration manually. Spring Boot’s documentation on using it with Maven will show you how.

Whichever approach you choose, no dependencies will be added to your application. However, when you do declare a dependency on something that’s part of the Platform, you will now be able to omit the version number. For example:

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

For more details of what’s included in the Platform and the versions that are provided, please refer to the appendix.

4.2 Using Spring IO Platform with Gradle

To use the Platform with Gradle, you can use the Gradle Dependency Management Plugin and import the bom in much the same way as you would with Maven. The use of a plugin is necessary as Gradle does not provide an equivalent of Maven’s built-in dependency management support.

To use the plugin, you configure your build to apply the plugin and then in the dependencyManagement configuration you import the Platform’s bom:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'io.spring.gradle:dependency-management-plugin:1.0.0.RELEASE'
    }
}

apply plugin: 'io.spring.dependency-management'

repositories {
    mavenCentral()
    maven { url 'http://repo.spring.io/libs-snapshot' }
}

dependencyManagement {
    imports {
        mavenBom 'io.spring.platform:platform-bom:Cairo-BUILD-SNAPSHOT'
    }
}

With this configuration in place you can then declare a dependency on an artifact that’s part of the Platform without specifying a version:

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

For more details of what’s included in the Platform and the versions that are provided, please refer to the appendix.