paimon-parent

Used in: 0 components

Overview

Description

The Apache Software Foundation provides support for the Apache community of open-source software projects. The Apache projects are characterized by a collaborative, consensus based development process, an open and pragmatic software license, and a desire to create high quality software that leads the way in its field. We consider ourselves not simply a group of projects sharing a server, but rather a community of developers and users.

Snippets

<dependency>
    <groupId>org.apache.paimon</groupId>
    <artifactId>paimon-parent</artifactId>
    <version>1.0.1</version>
</dependency>

Maven POM File

<?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</groupId>
        <artifactId>apache</artifactId>
        <version>23</version>
    </parent>

    <artifactId>paimon-parent</artifactId>
    <groupId>org.apache.paimon</groupId>
    <name>Paimon : </name>
    <version>1.0.1</version>
    <packaging>pom</packaging>

    <url>https://paimon.apache.org</url>
    <inceptionYear>2023</inceptionYear>

    <licenses>
        <license>
            <name>The Apache Software License, Version 2.0</name>
            <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
            <distribution>repo</distribution>
        </license>
    </licenses>

    <scm>
        <url>https://github.com/apache/paimon</url>
        <connection>git@github.com:apache/paimon.git</connection>
        <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/paimon.git</developerConnection>
    </scm>

    <modules>
        <module>paimon-benchmark</module>
        <module>paimon-codegen</module>
        <module>paimon-codegen-loader</module>
        <module>paimon-common</module>
        <module>paimon-core</module>
        <module>paimon-flink</module>
        <module>paimon-docs</module>
        <module>paimon-e2e-tests</module>
        <module>paimon-filesystems</module>
        <module>paimon-format</module>
        <module>paimon-bundle</module>
        <module>paimon-hive</module>
        <module>paimon-spark</module>
        <module>paimon-service</module>
        <module>paimon-test-utils</module>
        <module>paimon-arrow</module>
        <module>tools/ci/paimon-ci-tools</module>
        <module>paimon-open-api</module>
    </modules>

    <properties>
        <project.build.outputTimestamp>2025-01-24T08:54:03Z</project.build.outputTimestamp>
        <paimon.shade.version>0.8.0</paimon.shade.version>
        <paimon.shade.jackson.version>2.14.2</paimon.shade.jackson.version>
        <paimon.shade.guava.version>30.1.1-jre</paimon.shade.guava.version>
        <paimon.shade.caffeine.version>2.9.3</paimon.shade.caffeine.version>
        <paimon.shade.netty.version>4.1.100.Final</paimon.shade.netty.version>
        <antlr4.version>4.9.3</antlr4.version>
        <hadoop.version>2.8.5</hadoop.version>
        <scala.binary.version>2.12</scala.binary.version>
        <flink.scala.binary.version>2.12</flink.scala.binary.version>
        <scala212.version>2.12.15</scala212.version>
        <scala213.version>2.13.14</scala213.version>
        <scala.version>${scala212.version}</scala.version>
        <codegen.scala.version>${scala212.version}</codegen.scala.version>
        <snappy.version>1.1.8.4</snappy.version>
        <airlift.version>0.27</airlift.version>
        <lz4.version>1.8.0</lz4.version>
        <slf4j.version>1.7.32</slf4j.version>
        <log4j.version>2.17.1</log4j.version>
        <junit4.version>4.13.2</junit4.version>
        <junit5.version>5.8.1</junit5.version>
        <spotless.version>2.13.0</spotless.version>
        <spotless.delimiter>package</spotless.delimiter>
        <target.java.version>1.8</target.java.version>
        <assertj.version>3.23.1</assertj.version>
        <javax.annotation-api.version>1.3.2</javax.annotation-api.version>
        <flink.forkCount>1C</flink.forkCount>
        <flink.reuseForks>true</flink.reuseForks>
        <testcontainers.version>1.19.1</testcontainers.version>
        <iceberg.version>1.6.1</iceberg.version>
        <parquet.version>1.13.1</parquet.version>
        <orc.version>1.9.2</orc.version>
        <protobuf-java.version>3.19.6</protobuf-java.version>

        <!-- Can be set to any value to reproduce a specific build. -->
        <test.randomization.seed/>
        <test.unit.pattern>**/*Test.*</test.unit.pattern>
        <test.flink.main.version>1.20</test.flink.main.version>
        <test.flink.version>1.20.0</test.flink.version>
        <!-- TODO upgrade after connector releases x-1.19 version -->
        <test.flink.connector.kafka.version>3.0.1-1.18</test.flink.connector.kafka.version>
        <test.mysql.connector.java.version>8.0.27</test.mysql.connector.java.version>

        <!-- spark profile properties-->
        <paimon-sparkx-common>paimon-spark3-common</paimon-sparkx-common>
        <paimon-spark-common.spark.version>3.5.3</paimon-spark-common.spark.version>
        <test.spark.main.version>3.3</test.spark.main.version>
        <test.spark.version>3.3.0</test.spark.version>

        <zstd-jni.version>1.5.5-11</zstd-jni.version>
        <janino.version>3.0.11</janino.version>
        <mockito.version>3.4.6</mockito.version>
        <jaxb.api.version>2.3.1</jaxb.api.version>
        <findbugs.version>1.3.9</findbugs.version>
        <json-smart.version>2.4.9</json-smart.version>
        <avro.version>1.11.3</avro.version>
        <kafka.version>3.2.3</kafka.version>
        <scala-maven-plugin.version>3.2.2</scala-maven-plugin.version>
        <scalatest-maven-plugin.version>2.1.0</scalatest-maven-plugin.version>
        <jsoup.version>1.15.3</jsoup.version>
        <CodeCacheSize>128m</CodeCacheSize>
        <extraJavaTestArgs>
            -XX:+IgnoreUnrecognizedVMOptions
            --add-opens=java.base/java.lang=ALL-UNNAMED
            --add-opens=java.base/java.lang.invoke=ALL-UNNAMED
            --add-opens=java.base/java.lang.reflect=ALL-UNNAMED
            --add-opens=java.base/java.io=ALL-UNNAMED
            --add-opens=java.base/java.net=ALL-UNNAMED
            --add-opens=java.base/java.nio=ALL-UNNAMED
            --add-opens=java.base/java.util=ALL-UNNAMED
            --add-opens=java.base/java.util.concurrent=ALL-UNNAMED
            --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED
            --add-opens=java.base/jdk.internal.ref=ALL-UNNAMED
            --add-opens=java.base/sun.nio.ch=ALL-UNNAMED
            --add-opens=java.base/sun.nio.cs=ALL-UNNAMED
            --add-opens=java.base/sun.security.action=ALL-UNNAMED
            --add-opens=java.base/sun.util.calendar=ALL-UNNAMED
            -Djdk.reflect.useDirectMethodHandle=false
            -Dio.netty.tryReflectionSetAccessible=true
        </extraJavaTestArgs>
    </properties>

    <dependencies>
        <!-- Root dependencies for all projects -->
        <!-- Logging API -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>

        <!-- 'javax.annotation' classes like '@Nullable' -->
        <dependency>
            <groupId>com.google.code.findbugs</groupId>
            <artifactId>jsr305</artifactId>
        </dependency>

        <!-- test dependencies -->

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <version>${assertj.version}</version>
            <scope>test</scope>
        </dependency>

        <!-- tests will have log4j as the default logging framework available -->

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <!-- API bridge between log4j 1 and 2 -->
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-1.2-api</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>javax.annotation</groupId>
                <artifactId>javax.annotation-api</artifactId>
                <version>${javax.annotation-api.version}</version>
            </dependency>

            <!-- This manages the 'javax.annotation' annotations (JSR305) -->
            <dependency>
                <groupId>com.google.code.findbugs</groupId>
                <artifactId>jsr305</artifactId>
                <version>${findbugs.version}</version>
            </dependency>

            <dependency>
                <groupId>org.junit</groupId>
                <artifactId>junit-bom</artifactId>
                <version>${junit5.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit4.version}</version>
            </dependency>

            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${slf4j.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-slf4j-impl</artifactId>
                <version>${log4j.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
                <version>${log4j.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>${log4j.version}</version>
            </dependency>

            <dependency>
                <!-- API bridge between log4j 1 and 2 -->
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-1.2-api</artifactId>
                <version>${log4j.version}</version>
            </dependency>

            <dependency>
                <!-- pin transitive dependency of org.apache.hadoop:hadoop-common:2.8.5 -->
                <groupId>net.minidev</groupId>
                <artifactId>json-smart</artifactId>
                <version>${json-smart.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <profiles>
        <!--
          We're reusing the apache-release build profile defined in the Apache Parent POM,
          with one exclusion: do not run the source-release-assembly execution goal.
          We have our own scripts to create the source release, which correctly excludes
          binaries from distribution tarball.
          The script can be found under tools/releasing/create_source_release.sh.
        -->
        <profile>
            <id>apache-release</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <dependencies>
                            <dependency>
                                <groupId>org.apache.apache.resources</groupId>
                                <artifactId>apache-source-release-assembly-descriptor</artifactId>
                                <version>1.0.6</version>
                            </dependency>
                        </dependencies>
                        <executions>
                            <execution>
                                <id>source-release-assembly</id>
                                <!-- disable the execution -->
                                <phase>none</phase>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>docs-and-source</id>
            <activation>
                <property>
                    <name>docs-and-source</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <version>3.2.1</version>
                        <executions>
                            <execution>
                                <id>attach-sources</id>
                                <goals>
                                    <goal>jar-no-fork</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <configuration>
                            <quiet>true</quiet>
                        </configuration>
                        <executions>
                            <execution>
                                <id>attach-javadocs</id>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>spark3</id>
            <modules>
                <module>paimon-spark/paimon-spark3-common</module>
                <module>paimon-spark/paimon-spark-3.5</module>
                <module>paimon-spark/paimon-spark-3.4</module>
                <module>paimon-spark/paimon-spark-3.3</module>
                <module>paimon-spark/paimon-spark-3.2</module>
            </modules>
            <properties>
                <scala.binary.version>2.12</scala.binary.version>
                <scala.version>${scala212.version}</scala.version>
                <paimon-spark-common.spark.version>3.5.3</paimon-spark-common.spark.version>
                <paimon-sparkx-common>paimon-spark3-common</paimon-sparkx-common>
                <!-- todo: support the latest spark in paimon e2e test2 -->
                <test.spark.main.version>3.3</test.spark.main.version>
                <test.spark.version>3.3.0</test.spark.version>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
                <property>
                    <name>spark3</name>
                </property>
            </activation>
        </profile>

        <profile>
            <id>spark4</id>
            <modules>
                <module>paimon-spark/paimon-spark4-common</module>
                <module>paimon-spark/paimon-spark-4.0</module>
            </modules>
            <properties>
                <target.java.version>17</target.java.version>
                <antlr4.version>4.13.1</antlr4.version>
                <scala.binary.version>2.13</scala.binary.version>
                <scala.version>${scala213.version}</scala.version>
                <paimon-spark-common.spark.version>4.0.0-preview2</paimon-spark-common.spark.version>
                <paimon-sparkx-common>paimon-spark4-common</paimon-sparkx-common>
                <test.spark.main.version>4.0</test.spark.main.version>
                <test.spark.version>4.0.0-preview2</test.spark.version>
            </properties>
            <activation>
                <property>
                    <name>spark4</name>
                </property>
            </activation>
        </profile>
    </profiles>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.4.2</version><!--$NO-MVN-MAN-VER$-->
                <configuration>
                    <archive>
                        <manifestEntries>
                            <SCM-Revision>${git.commit.id}</SCM-Revision>
                        </manifestEntries>
                        <manifest>
                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>pl.project13.maven</groupId>
                <artifactId>git-commit-id-plugin</artifactId>
                <version>4.0.0</version>
                <executions>
                    <execution>
                        <id>get-the-git-infos</id>
                        <goals>
                            <goal>revision</goal>
                        </goals>
                        <phase>validate</phase>
                    </execution>
                </executions>
                <configuration>
                    <dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
                    <failOnNoGitDirectory>false</failOnNoGitDirectory>
                    <failOnUnableToExtractRepoInfo>false</failOnUnableToExtractRepoInfo>
                    <useNativeGit>true</useNativeGit>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.apache.rat</groupId>
                <artifactId>apache-rat-plugin</artifactId>
                <version>0.15</version>
                <inherited>false</inherited>
                <executions>
                    <execution>
                        <phase>verify</phase>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <excludeSubProjects>false</excludeSubProjects>
                    <numUnapprovedLicenses>0</numUnapprovedLicenses>
                    <licenses>
                        <!-- Enforce this license:
                          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.
                        -->
                        <license implementation="org.apache.rat.analysis.license.SimplePatternBasedLicense">
                            <licenseFamilyCategory>AL2</licenseFamilyCategory>
                            <licenseFamilyName>Apache License 2.0</licenseFamilyName>
                            <patterns>
                                <pattern>Licensed to the Apache Software Foundation (ASF) under one</pattern>
                            </patterns>
                        </license>
                    </licenses>
                    <licenseFamilies>
                        <licenseFamily implementation="org.apache.rat.license.SimpleLicenseFamily">
                            <familyName>Apache License 2.0</familyName>
                        </licenseFamily>
                    </licenseFamilies>
                    <excludes>
                        <!-- Additional files like .gitignore etc.-->
                        <exclude>**/.*/**</exclude>
                        <exclude>**/*.prefs</exclude>
                        <exclude>**/*.log</exclude>
                        <!-- Administrative files in the main trunk. -->
                        <exclude>**/README.md</exclude>
                        <exclude>**/CODE_OF_CONDUCT.md</exclude>
                        <exclude>.github/**</exclude>
                        <!-- IDE files. -->
                        <exclude>**/*.iml</exclude>
                        <exclude>**/.idea/**</exclude>
                        <!-- Generated content -->
                        <exclude>**/target/**</exclude>
                        <exclude>**/scalastyle-output.xml</exclude>
                        <exclude>docs/resources/**</exclude>
                        <exclude>docs/public/**</exclude>
                        <exclude>docs/themes/book/**</exclude>
                        <exclude>docs/assets/github.css</exclude>
                        <exclude>docs/static/js/anchor.min.js</exclude>
                        <exclude>**/*.svg</exclude>
                        <exclude>**/dependency-reduced-pom.xml</exclude>
                        <!-- Bundled license files -->
                        <exclude>**/LICENSE*</exclude>
                        <!-- artifacts created during release process -->
                        <exclude>release/**</exclude>
                        <!-- antlr grammar files -->
                        <exclude>paimon-common/src/main/antlr4/**</exclude>
                        <exclude>paimon-core/src/test/resources/compatibility/**</exclude>
                    </excludes>
                </configuration>
            </plugin>

            <plugin>
                <groupId>com.diffplug.spotless</groupId>
                <artifactId>spotless-maven-plugin</artifactId>
            </plugin>

            <!--surefire for unit tests and integration tests-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M5</version>
                <configuration>
                    <useSystemClassLoader>false</useSystemClassLoader>
                    <forkCount>${flink.forkCount}</forkCount>
                    <reuseForks>${flink.reuseForks}</reuseForks>
                    <trimStackTrace>false</trimStackTrace>
                    <systemPropertyVariables>
                        <forkNumber>0${surefire.forkNumber}</forkNumber>
                        <checkpointing.randomization>false</checkpointing.randomization>
                        <project.basedir>${project.basedir}</project.basedir>
                        <!--suppress MavenModelInspection -->
                        <test.randomization.seed>${test.randomization.seed}</test.randomization.seed>
                        <test.flink.main.version>${test.flink.main.version}</test.flink.main.version>
                        <test.flink.version>${test.flink.version}</test.flink.version>
                        <!-- for junit5 -->
                        <junit.jupiter.extensions.autodetection.enabled>true</junit.jupiter.extensions.autodetection.enabled>
                    </systemPropertyVariables>
                    <argLine>-Xms256m -Xmx2048m -Dmvn.forkNumber=${surefire.forkNumber} -XX:+UseG1GC ${extraJavaTestArgs}</argLine>
                    <!-- By removing all default exclusions the nested classes get executed too -->
                    <excludes>
                        <exclude/>
                    </excludes>
                </configuration>
                <executions>
                    <!--execute all the unit tests-->
                    <execution>
                        <id>default-test</id>
                        <phase>test</phase>
                        <goals>
                            <goal>test</goal>
                        </goals>
                        <configuration>
                            <includes>
                                <include>${test.unit.pattern}</include>
                            </includes>
                        </configuration>
                    </execution>
                    <!--execute all the integration tests-->
                    <execution>
                        <id>integration-tests</id>
                        <phase>integration-test</phase>
                        <goals>
                            <goal>test</goal>
                        </goals>
                        <configuration>
                            <includes>
                                <include>**/*.*</include>
                            </includes>
                            <excludes>
                                <exclude>${test.unit.pattern}</exclude>
                            </excludes>
                            <reuseForks>false</reuseForks>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <executions>
                    <execution>
                        <id>enforce-maven</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <requireMavenVersion>
                                    <!-- enforce at least mvn version 3.1.1 (see FLINK-12447) -->
                                    <version>[3.1.1,)</version>
                                </requireMavenVersion>
                                <requireJavaVersion>
                                    <version>${target.java.version}</version>
                                </requireJavaVersion>
                            </rules>
                        </configuration>
                    </execution>
                    <execution>
                        <id>ban-unsafe-snakeyaml</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <bannedDependencies>
                                    <excludes>
                                        <exclude>org.yaml:snakeyaml:(,1.26]</exclude>
                                    </excludes>
                                    <includes>
                                        <!-- Snakeyaml is pulled in by many modules without using it in production,
                                          so there's no benefit in us investing time into bumping these. -->
                                        <include>org.yaml:snakeyaml:(,1.26]:*:test</include>
                                    </includes>
                                </bannedDependencies>
                            </rules>
                        </configuration>
                    </execution>
                    <execution>
                        <id>ban-unsafe-jackson</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <bannedDependencies>
                                    <excludes>
                                        <exclude>com.fasterxml.jackson*:*:(,2.7.0]</exclude>
                                    </excludes>
                                </bannedDependencies>
                            </rules>
                        </configuration>
                    </execution>
                    <execution>
                        <id>forbid-log4j-1</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <bannedDependencies>
                                    <excludes>
                                        <exclude>log4j:log4j</exclude>
                                        <exclude>org.slf4j:slf4j-log4j12</exclude>
                                    </excludes>
                                </bannedDependencies>
                            </rules>
                        </configuration>
                    </execution>
                    <execution>
                        <id>forbid-direct-table-planner-dependencies</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <bannedDependencies>
                                    <excludes>
                                        <exclude>org.apache.flink:flink-table-planner_${flink.scala.binary.version}</exclude>
                                    </excludes>
                                    <includes>
                                        <include>org.apache.flink:flink-table-planner_${flink.scala.binary.version}:*:*:test</include>
                                    </includes>
                                    <message>
                                        Direct dependencies on flink-table-planner are not allowed.
                                        You should depend on either Table API modules, flink-table-planner-loader or paimon-codegen-loader.
                                    </message>
                                </bannedDependencies>
                            </rules>
                        </configuration>
                    </execution>
                    <execution>
                        <id>dependency-convergence</id>
                        <!-- disabled by default as it interacts badly with shade-plugin -->
                        <phase>none</phase>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <dependencyConvergence/>
                            </rules>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <executions>
                    <execution>
                        <id>shade-paimon</id>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <shadeTestJar>false</shadeTestJar>
                            <shadedArtifactAttached>false</shadedArtifactAttached>
                            <createDependencyReducedPom>true</createDependencyReducedPom>
                            <!-- Filters MUST be appended; merging filters does not work properly, see MSHADE-305 -->
                            <filters combine.children="append">
                                <!-- Globally exclude log4j.properties from our JAR files. -->
                                <filter>
                                    <artifact>*</artifact>
                                    <excludes>
                                        <exclude>log4j.properties</exclude>
                                        <exclude>log4j2.properties</exclude>
                                        <exclude>log4j-test.properties</exclude>
                                        <exclude>log4j2-test.properties</exclude>
                                        <!-- Do not copy the signatures in the META-INF folder.
								Otherwise, this might cause SecurityExceptions when using the JAR. -->
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                                <!-- drop entries into META-INF and NOTICE files for the dummy artifact -->
                                <filter>
                                    <artifact>org.apache.flink:force-shading</artifact>
                                    <excludes>
                                        <exclude>**</exclude>
                                    </excludes>
                                </filter>
                                <!-- io.netty:netty brings its own LICENSE.txt which we don't need -->
                                <filter>
                                    <artifact>io.netty:netty</artifact>
                                    <excludes>
                                        <exclude>META-INF/LICENSE.txt</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                            <artifactSet>
                                <includes>
                                    <!-- Unfortunately, the next line is necessary for now to force the execution
                                    of the Shade plugin upon all sub modules. This will generate effective poms,
                                    i.e. poms which do not contain properties which are derived from this root pom.
                                    In particular, the Scala version properties are defined in the root pom and without
                                    shading, the root pom would have to be Scala suffixed and thereby all other modules.
                                    -->
                                    <include>org.apache.flink:force-shading</include>
                                </includes>
                            </artifactSet>
                            <transformers combine.children="append">
                                <!-- The service transformer is needed to merge META-INF/services files -->
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                                <!-- The ApacheNoticeResourceTransformer collects and aggregates NOTICE files -->
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.ApacheNoticeResourceTransformer">
                                    <projectName>Apache Paimon</projectName>
                                    <inceptionYear>${project.inceptionYear}</inceptionYear>
                                    <encoding>UTF-8</encoding>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-clean-plugin</artifactId>
                <configuration>
                    <filesets>
                        <fileset>
                            <directory>${project.basedir}</directory>
                            <includes>
                                <include>dependency-reduced-pom.xml</include>
                            </includes>
                        </fileset>
                    </filesets>
                </configuration>
            </plugin>

            <!-- generate configuration docs -->
            <plugin>
                <groupId>org.commonjava.maven.plugins</groupId>
                <artifactId>directory-maven-plugin</artifactId>
                <version>1.0</version>
                <executions>
                    <execution>
                        <id>directories</id>
                        <goals>
                            <goal>directory-of</goal>
                        </goals>
                        <phase>initialize</phase>
                        <configuration>
                            <property>rootDir</property>
                            <project>
                                <groupId>org.apache.paimon</groupId>
                                <artifactId>paimon-parent</artifactId>
                            </project>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>

        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>build-helper-maven-plugin</artifactId>
                    <version>1.7</version>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.0</version>
                    <configuration>
                        <source>${target.java.version}</source>
                        <target>${target.java.version}</target>
                        <!-- The semantics of this option are reversed, see MCOMPILER-209. -->
                        <useIncrementalCompilation>false</useIncrementalCompilation>
                        <compilerArgs>
                            <!-- Prevents recompilation due to missing package-info.class, see MCOMPILER-205 -->
                            <arg>-Xpkginfo:always</arg>
                            <arg>-Xlint:deprecation</arg>
                        </compilerArgs>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-checkstyle-plugin</artifactId>
                    <version>2.17</version>
                    <dependencies>
                        <dependency>
                            <groupId>com.puppycrawl.tools</groupId>
                            <artifactId>checkstyle</artifactId>
                            <!-- Note: match version with docs/flinkDev/ide_setup.md -->
                            <version>8.14</version>
                        </dependency>
                    </dependencies>
                    <executions>
                        <execution>
                            <id>validate</id>
                            <phase>validate</phase>
                            <goals>
                                <goal>check</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <suppressionsLocation>/tools/maven/suppressions.xml</suppressionsLocation>
                        <includeTestSourceDirectory>true</includeTestSourceDirectory>
                        <configLocation>/tools/maven/checkstyle.xml</configLocation>
                        <logViolationsToConsole>true</logViolationsToConsole>
                        <failOnViolation>true</failOnViolation>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>com.diffplug.spotless</groupId>
                    <artifactId>spotless-maven-plugin</artifactId>
                    <version>${spotless.version}</version>
                    <configuration>
                        <java>
                            <googleJavaFormat>
                                <version>1.7</version>
                                <style>AOSP</style>
                            </googleJavaFormat>

                            <!-- \# refers to the static imports -->
                            <importOrder>
                                <order>org.apache.paimon,org.apache.paimon.shade,,javax,java,scala,\#</order>
                            </importOrder>

                            <licenseHeader>
                                <!-- replace it with ${project.rootDirectory} after maven 4.0.0, see MNG-7038 -->
                                <file>${maven.multiModuleProjectDirectory}/copyright.txt</file>
                                <delimiter>${spotless.delimiter}</delimiter>
                            </licenseHeader>
                        </java>
                        <scala>
                            <!--  make it works `// spotless:off`  -->
                            <toggleOffOn />

                            <scalafmt>
                                <version>3.4.3</version>
                                <file>${maven.multiModuleProjectDirectory}/.scalafmt.conf</file>
                            </scalafmt>

                            <licenseHeader>
                                <file>${maven.multiModuleProjectDirectory}/copyright.txt</file>
                                <delimiter>${spotless.delimiter}</delimiter>
                            </licenseHeader>
                        </scala>
                    </configuration>
                    <executions>
                        <execution>
                            <id>spotless-check</id>
                            <phase>validate</phase>
                            <goals>
                                <goal>check</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>


                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <version>2.9.1</version><!--$NO-MVN-MAN-VER$-->
                    <configuration>
                        <quiet>true</quiet>
                        <detectOfflineLinks>false</detectOfflineLinks>
                        <additionalJOptions combine.children="append">
                            <additionalJOption>-Xdoclint:none</additionalJOption>
                        </additionalJOptions>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-enforcer-plugin</artifactId>
                    <version>3.0.0-M1</version>
                </plugin>

                <!-- Pin the version of the maven shade plugin -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>3.4.1</version>
                </plugin>

                <!-- configure scala style -->
                <plugin>
                    <groupId>org.scalastyle</groupId>
                    <artifactId>scalastyle-maven-plugin</artifactId>
                    <version>1.0.0</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>check</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <verbose>false</verbose>
                        <failOnViolation>true</failOnViolation>
                        <includeTestSourceDirectory>true</includeTestSourceDirectory>
                        <failOnWarning>false</failOnWarning>
                        <sourceDirectory>${basedir}/src/main/scala</sourceDirectory>
                        <testSourceDirectory>${basedir}/src/test/scala</testSourceDirectory>
                        <outputFile>${project.basedir}/target/scalastyle-output.xml</outputFile>
                        <inputEncoding>UTF-8</inputEncoding>
                        <outputEncoding>UTF-8</outputEncoding>
                    </configuration>
                </plugin>

                <plugin>
                    <!-- Inherited from Apache parent, but not actually used. Disable to reduce noise. -->
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-site-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>attach-descriptor</id>
                            <phase>none</phase>
                        </execution>
                    </executions>
                </plugin>

                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>3.1.0</version>
                    <inherited>false</inherited>
                    <executions>
                        <execution>
                            <id>check-license</id>
                            <!-- manually called -->
                            <phase>none</phase>
                            <goals>
                                <goal>java</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <mainClass>org.apache.paimon.tools.ci.licensecheck.LicenseChecker</mainClass>
                        <includePluginDependencies>true</includePluginDependencies>
                        <includeProjectDependencies>false</includeProjectDependencies>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>org.apache.paimon</groupId>
                            <artifactId>paimon-ci-tools</artifactId>
                            <version>${project.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

    <!--
    Uncomment the following "repositories" tag if your maven fails to download paimon-shade snapshot files.
    We comment these tags by default because downloading from apache repositories is very slow for both github and developers.
    -->

    <!--
    <repositories>
        <repository>
            <id>central</id>
            <url>https://repo.maven.apache.org/maven2</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>apache-releases</id>
            <name>apache releases</name>
            <url>https://repository.apache.org/content/repositories/releases/</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>apache-snapshots</id>
            <name>apache snapshots</name>
            <url>https://repository.apache.org/content/repositories/snapshots/</url>
            <releases>
                <enabled>false</enabled>
            </releases>
        </repository>
    </repositories>
    -->
</project>