<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<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">
    <parent>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-parent</artifactId>
        <version>${revision}</version>
        <relativePath>../dubbo-spring-boot-parent/pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.apache.dubbo.samples</groupId>
    <artifactId>dubbo-spring-boot-samples</artifactId>
    <packaging>pom</packaging>
    <name>Apache Dubbo Spring Boot :: Samples</name>
    <description>Apache Dubbo Spring Boot :: Samples</description>

    <modules>
        <module>sample-api</module>
        <module>auto-configure-samples</module>
        <module>externalized-configuration-samples</module>
        <module>dubbo-registry-zookeeper-samples</module>
        <module>dubbo-registry-nacos-samples</module>
    </modules>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <profiles>

        <profile>
            <!-- Spring Boot 1.3 -->
            <id>spring-boot-1.3</id>
            <properties>
                <spring-boot.version>1.3.8.RELEASE</spring-boot.version>
            </properties>
        </profile>

        <profile>
            <!-- Spring Boot 1.4 -->
            <id>spring-boot-1.4</id>
            <properties>
                <spring-boot.version>1.4.7.RELEASE</spring-boot.version>
            </properties>
        </profile>

        <profile>
            <!-- Spring Boot 1.5 -->
            <id>spring-boot-1.5</id>
            <properties>
                <spring-boot.version>1.5.21.RELEASE</spring-boot.version>
            </properties>
        </profile>

        <profile>
            <!-- Spring Boot 2.0 -->
            <id>spring-boot-2.0</id>
            <properties>
                <spring-boot.version>2.0.9.RELEASE</spring-boot.version>
            </properties>
        </profile>

        <profile>
            <!-- Spring Boot 2.1 -->
            <id>spring-boot-2.1</id>
            <properties>
                <spring-boot.version>2.1.13.RELEASE</spring-boot.version>
            </properties>
        </profile>
      
    </profiles>
</project>