<?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>
  <parent>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-parent</artifactId>
    <version>${revision}</version>
    <relativePath>../pom.xml</relativePath>
  </parent>

  <artifactId>dubbo-dependencies</artifactId>
  <packaging>pom</packaging>
  <modules>
    <module>dubbo-dependencies-zookeeper</module>
    <module>dubbo-dependencies-zookeeper-curator5</module>
  </modules>

  <properties>
    <spotless-maven-plugin.version>2.43.0</spotless-maven-plugin.version>
    <spotless.action>check</spotless.action>
    <dubbo-shared-resources.version>1.0.0</dubbo-shared-resources.version>
    <palantirJavaFormat.version>2.38.0</palantirJavaFormat.version>
  </properties>

  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>flatten-maven-plugin</artifactId>
        <version>${maven_flatten_version}</version>
        <configuration>
          <updatePomFile>true</updatePomFile>
          <flattenMode>bom</flattenMode>
        </configuration>
        <executions>
          <execution>
            <id>flatten</id>
            <goals>
              <goal>flatten</goal>
            </goals>
            <phase>process-resources</phase>
          </execution>
          <execution>
            <id>flatten.clean</id>
            <goals>
              <goal>clean</goal>
            </goals>
            <phase>clean</phase>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

  <profiles>
    <profile>
      <id>java11+</id>
      <activation>
        <jdk>[11,)</jdk>
      </activation>
      <build>
        <!--- newer versions of plugins requires JDK 11 -->
        <plugins>
          <plugin>
            <groupId>com.diffplug.spotless</groupId>
            <artifactId>spotless-maven-plugin</artifactId>
            <version>${spotless-maven-plugin.version}</version>
            <configuration>
              <java>
                <palantirJavaFormat>
                  <version>${palantirJavaFormat.version}</version>
                </palantirJavaFormat>
                <removeUnusedImports />
                <importOrder>
                  <file>dubbo-importorder.txt</file>
                </importOrder>
                <licenseHeader>
                  <file>checkstyle-header.txt</file>
                </licenseHeader>
              </java>
              <pom>
                <sortPom>
                  <expandEmptyElements>false</expandEmptyElements>
                  <spaceBeforeCloseEmptyElement>true</spaceBeforeCloseEmptyElement>
                </sortPom>
              </pom>
              <upToDateChecking>
                <enabled>true</enabled>
              </upToDateChecking>
            </configuration>
            <dependencies>
              <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo-shared-resources</artifactId>
                <version>${dubbo-shared-resources.version}</version>
              </dependency>
            </dependencies>
            <executions>
              <execution>
                <goals>
                  <goal>${spotless.action}</goal>
                </goals>
                <phase>process-sources</phase>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

</project>
