<?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">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.apache.servicecomb.samples</groupId>
  <artifactId>samples</artifactId>
  <name>Java Chassis::Samples</name>
  <packaging>pom</packaging>
  <version>1.1.0</version>
  <modules>
    <module>codefirst-sample</module>
    <module>custom-handler-sample</module>
    <module>jaxrs-sample</module>
    <module>pojo-sample</module>
    <module>springmvc-sample</module>
    <module>common-schema</module>
    <module>auth-sample</module>
    <module>bmi</module>
    <module>metrics-write-file-sample</module>
    <module>metrics-extend-healthcheck</module>
    <module>config-apollo-sample</module>
    <module>use-log4j2-sample</module>
    <module>local-service-registry</module>
    <module>trust-sample</module>
    <module>apm-agent</module>
  </modules>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.apache.servicecomb</groupId>
        <artifactId>java-chassis-dependencies</artifactId>
        <version>1.1.0</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.servicecomb.samples</groupId>
        <artifactId>common-schema</artifactId>
        <version>1.1.0</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <build>
    <plugins>
      <!-- 配置项目使用jdk1.8编译 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <compilerArgument>-parameters</compilerArgument>
          <encoding>UTF-8</encoding>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-deploy-plugin</artifactId>
        <configuration>
          <skip>true</skip>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <configuration>
          <excludes>
            <exclude>.travis.yml</exclude>
            <exclude>**/*.md</exclude>
            <exclude>**/target/*</exclude>
            <!-- Skip the ssl configuration files -->
            <exculde>**/resources/ssl/**</exculde>
            <!-- Skip the protobuf files -->
            <exclude>**/*.proto</exclude>
            <!-- Skip the idl files -->
            <exclude>**/*.idl</exclude>
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
