<?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.samples</groupId>
        <artifactId>dubbo-spring-boot-samples</artifactId>
        <version>${revision}</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>dubbo-spring-boot-servlet-container-samples</artifactId>
    <name>Apache Dubbo Spring Boot :: Samples :: Servlet Container</name>
    <description>Apache Dubbo Spring Boot Servlet Container Samples</description>
    <packaging>pom</packaging>

    <modules>
        <module>provider-sample</module>
        <module>consumer-sample</module>
    </modules>

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

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

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

</project>