blob: 2b45bcb2dd73063b09126025e09ba1d0835ce75b [file] [log] [blame]
<?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>
<groupId>org.apache.iotdb</groupId>
<artifactId>iotdb-parent</artifactId>
<version>0.14.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Apache IoTDB Project Parent POM</name>
<description>This is the top level project that builds, packages the tsfile, iotdb engine, jdbc, and integration libs.</description>
<licenses>
<license>
<name>The Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<scm>
<connection>scm:git:ssh://git@github.com/apache/iotdb.git</connection>
<developerConnection>scm:git:ssh://git@github.com/apache/iotdb.git</developerConnection>
<url>ssh://git@github.com:apache/iotdb.git</url>
<tag>rel/0.10</tag>
</scm>
<!-- Only configure the site distribution as the rest is handled by the apache parent -->
<distributionManagement>
<site>
<id>apache.website</id>
<url>scm:git:https://gitbox.apache.org/repos/asf/iotdb-website.git</url>
</site>
</distributionManagement>
<issueManagement>
<system>Jira</system>
<url>https://issues.apache.org/jira/browse/iotdb</url>
</issueManagement>
<mailingLists>
<mailingList>
<name>Apache IoTDB Developer List</name>
<subscribe>mailto:dev-subscribe@iotdb.apache.org</subscribe>
<unsubscribe>mailto:dev-unsubscribe@iotdb.apache.org</unsubscribe>
<post>mailto:dev@iotdb.apache.org</post>
<archive>http://mail-archives.apache.org/mod_mbox/iotdb-dev/</archive>
</mailingList>
<mailingList>
<name>IoTDB Commits List</name>
<subscribe>mailto:commit-subscribe@iotdb.apache.org</subscribe>
<unsubscribe>mailto:commits-unsubscribe@iotdb.apache.org</unsubscribe>
<post>mailto:commits@iotdb.apache.org</post>
<archive>http://mail-archives.apache.org/mod_mbox/iotdb-commits/</archive>
</mailingList>
<mailingList>
<name>IoTDB Jira Notifications List</name>
<subscribe>mailto:notifications-subscribe@iotdb.apache.org</subscribe>
<unsubscribe>mailto:notifications-unsubscribe@iotdb.apache.org</unsubscribe>
<post>mailto:notifications@iotdb.apache.org</post>
<archive>http://mail-archives.apache.org/mod_mbox/iotdb-notifications/</archive>
</mailingList>
</mailingLists>
<modules>
<module>tsfile</module>
<module>antlr</module>
<module>thrift</module>
<module>thrift-commons</module>
<module>thrift-confignode</module>
<module>thrift-multi-leader-consensus</module>
<module>thrift-sync</module>
<module>thrift-influxdb</module>
<module>service-rpc</module>
<module>jdbc</module>
<module>influxdb-protocol</module>
<module>session</module>
<module>cli</module>
<module>openapi</module>
<module>server</module>
<module>example</module>
<module>grafana-plugin</module>
<module>grafana-connector</module>
<module>spark-tsfile</module>
<module>hadoop</module>
<module>spark-iotdb-connector</module>
<module>flink-tsfile-connector</module>
<module>flink-iotdb-connector</module>
<module>distribution</module>
<module>hive-connector</module>
<module>node-commons</module>
<module>confignode</module>
<module>cross-tests</module>
<module>zeppelin-interpreter</module>
<module>client-py</module>
<module>compile-tools</module>
<module>client-cpp</module>
<module>metrics</module>
<module>integration</module>
<module>integration-test</module>
<module>consensus</module>
<module>external-pipe-api</module>
<module>library-udf</module>
<module>schema-engine-rocksdb</module>
<module>udf-api</module>
<module>rewrite-tsfile-tool</module>
</modules>
<!-- Properties Management -->
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.assembly.version>3.1.0</maven.assembly.version>
<scala.library.version>2.11</scala.library.version>
<scala.version>2.11.12</scala.version>
<hadoop2.version>2.10.1</hadoop2.version>
<hive2.version>2.3.6</hive2.version>
<junit.version>4.13.2</junit.version>
<slf4j.version>1.7.12</slf4j.version>
<logback.version>1.2.10</logback.version>
<joda.version>2.9.9</joda.version>
<spark.version>2.4.5</spark.version>
<flink.version>1.14.0</flink.version>
<common.io.version>2.11.0</common.io.version>
<commons.collections4>4.4</commons.collections4>
<!-- keep consistent with client-cpp/tools/thrift/pom.xml-->
<thrift.version>0.14.1</thrift.version>
<airline.version>0.8</airline.version>
<jackson.version>2.10.5</jackson.version>
<antlr4.version>4.8-1</antlr4.version>
<common.cli.version>1.3.1</common.cli.version>
<common.codec.version>1.13</common.codec.version>
<common.collections.version>3.2.2</common.collections.version>
<common.lang3.version>3.9</common.lang3.version>
<common.logging.version>1.1.3</common.logging.version>
<common.pool2.version>2.11.1</common.pool2.version>
<org.slf4j.version>1.7.36</org.slf4j.version>
<guava.version>24.1.1</guava.version>
<jline.version>3.21.0</jline.version>
<jetty.version>9.4.48.v20220622</jetty.version>
<metrics.version>4.2.7</metrics.version>
<javax.xml.bind.version>2.4.0-b180830.0359</javax.xml.bind.version>
<felix.version>5.1.7</felix.version>
<snappy.version>1.1.8.4</snappy.version>
<netty.version>4.1.53.Final</netty.version>
<!-- URL of the ASF SonarQube server -->
<sonar.host.url>https://sonarcloud.io</sonar.host.url>
<sonar.organization>apache</sonar.organization>
<!-- Exclude all generated code -->
<sonar.exclusions>**/generated-sources</sonar.exclusions>
<sonar.java.checkstyle.reportPaths>target/checkstyle-report.xml</sonar.java.checkstyle.reportPaths>
<sonar.coverage.jacoco.xmlReportPaths>target/jacoco-merged-reports/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>
<sonar.junit.reportPaths>target/surefire-reports,target/failsafe-reports</sonar.junit.reportPaths>
<!-- By default, the argLine is empty-->
<gson.version>2.8.9</gson.version>
<argLine/>
<!-- whether enable compiling the cpp client-->
<client-cpp>false</client-cpp>
<!-- disable enforcer by default-->
<enforcer.skip>true</enforcer.skip>
<spotless.version>2.22.8</spotless.version>
<httpclient.version>4.5.13</httpclient.version>
<httpcore.version>4.4.15</httpcore.version>
<!-- for REST service -->
<swagger.core.version>1.5.18</swagger.core.version>
<servlet.api.version>2.5</servlet.api.version>
<openapi.generator.version>5.0.0</openapi.generator.version>
<!-- cli -->
<progressbar.version>0.9.3</progressbar.version>
<!-- for java 11-->
<javax.annotation-api.version>1.3.2</javax.annotation-api.version>
<log4j.version>1.2.19</log4j.version>
<lz4-java.version>1.8.0</lz4-java.version>
<jackson-mapper-asl.version>1.9.13</jackson-mapper-asl.version>
<jaxb-runtime.version>3.0.2</jaxb-runtime.version>
<mockito-core.version>2.23.0</mockito-core.version>
<objenesis.version>3.2</objenesis.version>
<powermock-core.version>2.0.9</powermock-core.version>
<scalatest_2.11.version>3.0.5</scalatest_2.11.version>
<io.airlift.units.version>1.6</io.airlift.units.version>
<io.airlift.slice.version>0.41</io.airlift.slice.version>
<dep.airlift.version>200</dep.airlift.version>
<!-- do not upgrade this package unless we have to...
Some experiments(https://github.com/jixuan1989/DependencyTest/blob/main/src/main/java/timecho/exp/JolTimeCost.java):
jol v0.2, scan tsfile package and calculate the classes size, time cost: 600ms
jol v0.4: time cost is 980ms,
jol v0.14, time cost is 1600ms
-->
<jol-core.version>0.2</jol-core.version>
<jackson-core-asl.version>1.9.13</jackson-core-asl.version>
<mqtt-client.version>1.12</mqtt-client.version>
<google.code.findbugs.jsr305.version>3.0.2</google.code.findbugs.jsr305.version>
<jna.version>5.8.0</jna.version>
<zookeeper.version>3.4.14</zookeeper.version>
<commons-beanutils.version>1.9.4</commons-beanutils.version>
<commons-compress.version>1.21</commons-compress.version>
<error_prone_annotations.version>2.7.1</error_prone_annotations.version>
<testcontainers.version>1.15.3</testcontainers.version>
<eclipse-collections.version>10.4.0</eclipse-collections.version>
<awaitility.version>4.0.3</awaitility.version>
<!-- JDK1.8 only support google java format 1.7-->
<google.java.format.version>1.7</google.java.format.version>
<!-- caffeine cache -->
<caffeine>2.9.1</caffeine>
<commons-csv.version>1.9.0</commons-csv.version>
<commons-lang.version>2.6</commons-lang.version>
<influxdb-java.version>2.21</influxdb-java.version>
<JTransforms.version>3.1</JTransforms.version>
</properties>
<!--
if we claim dependencies in dependencyManagement, then we do not claim
their version in sub-project's pom, but we have to claim themselves again
in sub-projects
-->
<dependencyManagement>
<dependencies>
<!--
in the subprojects, you have to claim logback again, because maybe
someone in your dependences uses log4j lib.
-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-paranamer</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-scala_2.11</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>[${guava.version},)</version>
</dependency>
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>${common.cli.version}</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>${common.codec.version}</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>${common.collections.version}</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${common.io.version}</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>${common.logging.version}</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>${netty.version}</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-buffer</artifactId>
<version>${netty.version}</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-common</artifactId>
<version>${netty.version}</version>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>${javax.annotation-api.version}</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>${javax.xml.bind.version}</version>
</dependency>
<dependency>
<groupId>org.jline</groupId>
<artifactId>jline</artifactId>
<version>${jline.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.reload4j</groupId>
<artifactId>reload4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.lz4</groupId>
<artifactId>lz4-java</artifactId>
<version>${lz4-java.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>me.tongfei</groupId>
<artifactId>progressbar</artifactId>
<version>${progressbar.version}</version>
<exclusions>
<!-- This transitive dependency duplicates classes from jline:jline:jar:2.14.5:compile -->
<exclusion>
<groupId>org.fusesource.jansi</groupId>
<artifactId>jansi</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr4-runtime</artifactId>
<version>${antlr4.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>${commons.collections4}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${common.lang3.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>${common.pool2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${hadoop2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-serde</artifactId>
<version>${hive2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>${hive2.version}</version>
<exclusions>
<exclusion>
<groupId>org.pentaho</groupId>
<artifactId>pentaho-aggdesigner-algorithm</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>${jackson-core-asl.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>${jackson-mapper-asl.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>${jaxb-runtime.version}</version>
<exclusions>
<exclusion>
<groupId>jakarta.activation</groupId>
<artifactId>jakarta.activation-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- <dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.24.1-GA</version>
</dependency>-->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>${mockito-core.version}</version>
</dependency>
<!-- for generate a class instance. (where to use it ?)-->
<!-- <dependency>-->
<!-- <groupId>org.objenesis</groupId>-->
<!-- <artifactId>objenesis</artifactId>-->
<!-- <version>${objenesis.version}</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-core</artifactId>
<version>${powermock-core.version}</version>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito2</artifactId>
<version>${powermock-core.version}</version>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>${powermock-core.version}</version>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-reflect</artifactId>
<version>${scala.version}</version>
</dependency>
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest_2.11</artifactId>
<version>${scalatest_2.11.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>${org.slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-reload4j</artifactId>
<version>${org.slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.xerial.snappy</groupId>
<artifactId>snappy-java</artifactId>
<version>${snappy.version}</version>
</dependency>
<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libthrift</artifactId>
<version>${thrift.version}</version>
<exclusions>
<exclusion>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.airlift</groupId>
<artifactId>units</artifactId>
<version>${io.airlift.units.version}</version>
</dependency>
<dependency>
<groupId>io.airlift</groupId>
<artifactId>airline</artifactId>
<version>${airline.version}</version>
</dependency>
<dependency>
<groupId>io.airlift</groupId>
<artifactId>slice</artifactId>
<version>${io.airlift.slice.version}</version>
</dependency>
<dependency>
<groupId>io.airlift</groupId>
<artifactId>stats</artifactId>
<version>${dep.airlift.version}</version>
</dependency>
<dependency>
<groupId>io.airlift</groupId>
<artifactId>concurrent</artifactId>
<version>${dep.airlift.version}</version>
</dependency>
<dependency>
<groupId>org.openjdk.jol</groupId>
<artifactId>jol-core</artifactId>
<version>${jol-core.version}</version>
</dependency>
<dependency>
<groupId>org.fusesource.mqtt-client</groupId>
<artifactId>mqtt-client</artifactId>
<version>${mqtt-client.version}</version>
</dependency>
<!-- many dependencies (hadoop, spark, hive, flink) use findbugs but with different version...-->
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<!-- spark uses the lastest version than hive, flink and hadoop-->
<version>${google.code.findbugs.jsr305.version}</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>${gson.version}</version>
</dependency>
<!-- for cli and test container -->
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>${jna.version}</version>
</dependency>
<!-- for hadoop connector -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>${zookeeper.version}</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>${commons-beanutils.version}</version>
</dependency>
<!-- for test-container and hadoop conflict-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>${commons-compress.version}</version>
</dependency>
<!-- for spark-iotdb-connector and hadoop connector conflict -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient.version}</version>
</dependency>
<!-- for spark-iotdb conflict -->
<dependency>
<groupId>com.google.errorprone</groupId>
<artifactId>error_prone_annotations</artifactId>
<version>${error_prone_annotations.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>${httpcore.version}</version>
</dependency>
<!-- for hive connector-->
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>${caffeine}</version>
</dependency>
<dependency>
<groupId>org.awaitility</groupId>
<artifactId>awaitility</artifactId>
<version>${awaitility.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>${commons-csv.version}</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>${commons-lang.version}</version>
</dependency>
<dependency>
<groupId>org.influxdb</groupId>
<artifactId>influxdb-java</artifactId>
<version>${influxdb-java.version}</version>
</dependency>
<dependency>
<groupId>com.github.wendykierp</groupId>
<artifactId>JTransforms</artifactId>
<version>${JTransforms.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>testcontainers</artifactId>
<version>${testcontainers.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-jexl3</artifactId>
<version>3.2.1</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<!-- using `mvn -N versions:update-child-modules` can update the version
of child modules to what their parent claims -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.3</version>
<configuration>
<generateBackupPoms>false</generateBackupPoms>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<excludePackageNames>*thrift*</excludePackageNames>
<!--
This will suppress the generation of a hidden timestamp at the top of each generated html page
and hopefully let the site generation nod to too big updates every time.
-->
<notimestamp>true</notimestamp>
<!--Don't fail the build, just because there were issues in the JavaDoc generation.-->
<failOnError>false</failOnError>
</configuration>
</plugin>
<!--
We need to increase the memory available to tests as we were
getting out-of-memory errors when building on windows machines.
-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>${argLine} -Xmx1024m</argLine>
</configuration>
</plugin>
<!--
Plugin for doing the code analysis.
-->
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.6.1.1688</version>
</plugin>
<plugin>
<groupId>org.apache.rat</groupId>
<artifactId>apache-rat-plugin</artifactId>
<configuration>
<consoleOutput>true</consoleOutput>
<excludes>
<!-- Git related files -->
<exclude>**/.git/**</exclude>
<exclude>**/.mvn/**</exclude>
<exclude>**/.gitignore</exclude>
<exclude>**/.gitmodules</exclude>
<exclude>**/.git-blame-ignore-revs</exclude>
<!-- Maven related files -->
<exclude>**/target/**</exclude>
<!-- Eclipse related files -->
<exclude>**/.project</exclude>
<exclude>**/.settings/**</exclude>
<exclude>**/.classpath</exclude>
<!-- IntelliJ related files -->
<exclude>**/.idea/**</exclude>
<exclude>**/*.iml</exclude>
<!-- Runtime log -->
<exclude>**/*.log</exclude>
<!-- Exclude CVS files -->
<exclude>**/*.cvs</exclude>
<!-- licenses -->
<exclude>licenses/*</exclude>
<!-- only for Travis CI with WinOS-->
<exclude>hadoopbin</exclude>
<exclude>windowssystem32</exclude>
<!-- generated by Github -->
<exclude>**/.github/**</exclude>
<!-- figures -->
<exclude>**/.eps</exclude>
<exclude>**/.png</exclude>
<exclude>**/.jpg</exclude>
<exclude>**/.jpeg</exclude>
<!--Generated by Apache Release -->
<exclude>local-snapshots-dir/**</exclude>
<!-- JSON can't contain comments and therefore no Apache header -->
<exclude>*.json</exclude>
<!-- visualization plans -->
<exclude>**/*.plan</exclude>
<exclude>**/NOTICE-binary</exclude>
<exclude>**/LICENSE-binary</exclude>
<!-- json does not support comments-->
<exclude>**/*.json</exclude>
<!-- the zeppelin export file format-->
<exclude>**/*.zpln</exclude>
<!-- exclude go.mod and go.sum in iotdb-client-go submodule-->
<exclude>**/go.mod</exclude>
<exclude>**/go.sum</exclude>
<!-- python -->
<exclude>.pytest_cache/**</exclude>
<exclude>venv/**</exclude>
<exclude>apache_iotdb.egg-info/**</exclude>
<exclude>**/iotdb/thrift/__init__.py</exclude>
<exclude>**/iotdb/thrift/rpc/__init__.py</exclude>
<exclude>**/iotdb/thrift/common/__init__.py</exclude>
<!-- Java SPI uses files in resources/META-INF/services-->
<exclude>**/resources/META-INF/services/**</exclude>
<!-- grafana plugin -->
<exclude>**/yarn.lock</exclude>
<!-- site-->
<exclude>**/redirects</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<version>${spotless.version}</version>
<configuration>
<java>
<googleJavaFormat>
<version>${google.java.format.version}</version>
<style>GOOGLE</style>
</googleJavaFormat>
<importOrder>
<order>org.apache.iotdb,,javax,java,\#</order>
</importOrder>
<removeUnusedImports/>
</java>
<lineEndings>UNIX</lineEndings>
</configuration>
<executions>
<execution>
<id>spotless-check</id>
<phase>validate</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.eluder.coveralls</groupId>
<artifactId>coveralls-maven-plugin</artifactId>
<version>4.3.0</version>
<configuration>
<jacocoReports>
<jacocoReport>code-coverage/target/jacoco-merged-reports/jacoco.xml</jacocoReport>
</jacocoReports>
<sourceEncoding>UTF-8</sourceEncoding>
<sourceDirectories>
<!-- put all source folders not in src/main/java here-->
<sourceDirectory>antlr/target/generated-sources/antlr4</sourceDirectory>
<sourceDirectory>thrift/target/generated-sources/thrift</sourceDirectory>
<sourceDirectory>thrift-commons/target/generated-sources/thrift</sourceDirectory>
<sourceDirectory>thrift-confignode/target/generated-sources/thrift</sourceDirectory>
<sourceDirectory>thrift-multi-leader-consensus/target/generated-sources/thrift</sourceDirectory>
<sourceDirectory>thrift-sync/target/generated-sources/thrift</sourceDirectory>
<sourceDirectory>thrift-cluster/target/generated-sources/thrift</sourceDirectory>
<sourceDirectory>thrift-influxdb/target/generated-sources/thrift</sourceDirectory>
<sourceDirectory>openapi/target/generated-sources/java/src/gen/java</sourceDirectory>
<sourceDirectory>openapi/target/generated-sources/java/src/main/java</sourceDirectory>
<sourceDirectory>spark-iotdb-connector/src/main/scala</sourceDirectory>
<sourceDirectory>spark-tsfile/src/main/scala</sourceDirectory>
</sourceDirectories>
</configuration>
<!-- JDK11 removes the following libs. We have to add them-->
<dependencies>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.4.0-b180830.0359</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.6</version>
</dependency>
</dependencies>
</plugin>
<!--
Strange things usually happen if you run with a too low Java version.
This plugin not only checks the minimum java version of 1.8, but also
checks all dependencies (and transitive dependencies) for reported CVEs.
-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0-M2</version>
<!--$NO-MVN-MAN-VER$-->
<executions>
<!-- Ensure we're not mixing dependency versions -->
<execution>
<id>enforce-version-convergence</id>
<phase>validate</phase>
<configuration>
<rules>
<dependencyConvergence/>
</rules>
</configuration>
<goals>
<goal>enforce</goal>
</goals>
</execution>
<!--
Fails the build if classes are included from multiple
artifacts and these are not identical.
-->
<!--execution>
<id>enforce-ban-duplicate-classes</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<banDuplicateClasses>
<scopes>
<scope>compile</scope>
<scope>provided</scope>
</scopes>
<findAllDuplicates>true</findAllDuplicates>
<ignoreWhenIdentical>true</ignoreWhenIdentical>
</banDuplicateClasses>
</rules>
<fail>true</fail>
</configuration>
</execution-->
<!-- Make sure no dependencies are used for which known vulnerabilities exist. -->
<execution>
<id>vulnerability-checks</id>
<phase>validate</phase>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<!-- Just generate warnings for now -->
<fail>false</fail>
<rules>
<requireJavaVersion>
<version>1.8.0</version>
</requireJavaVersion>
<!-- Disabled for now as it breaks the ability to build single modules -->
<!--reactorModuleConvergence/-->
<banVulnerable implementation="org.sonatype.ossindex.maven.enforcer.BanVulnerableDependencies"/>
</rules>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.sonatype.ossindex.maven</groupId>
<artifactId>ossindex-maven-enforcer-rules</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>extra-enforcer-rules</artifactId>
<version>1.4</version>
</dependency>
</dependencies>
</plugin>
<!--
Even if Maven transitively pulls in dependencies, relying on these can
quite often cause hard to find problems. So it's a good practice to make
sure everything directly required is also directly added as a dependency.
On the other side adding unused dependency only over-complicates the
the dependency graph, so the maven-dependency-plugin checks we depend on
what we need and only that and that runtime dependencies are correctly
imported with runtime scope.
-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>check-dependencies</id>
<phase>verify</phase>
<goals>
<goal>analyze-only</goal>
</goals>
<configuration>
<failOnWarning>false</failOnWarning>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>net.revelc.code.formatter</groupId>
<artifactId>formatter-maven-plugin</artifactId>
<version>2.8.1</version>
</plugin>
<!--for code style check -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.1.2</version>
<dependencies>
<dependency>
<groupId>com.puppycrawl.tools</groupId>
<artifactId>checkstyle</artifactId>
<version>8.45.1</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>validate</id>
<phase>validate</phase>
<goals>
<goal>check</goal>
</goals>
<configuration>
<outputFile>target/checkstyle-report.xml</outputFile>
<configLocation>checkstyle.xml</configLocation>
</configuration>
</execution>
</executions>
<configuration>
<configLocation>checkstyle.xml</configLocation>
<includeTestSourceDirectory>true</includeTestSourceDirectory>
</configuration>
</plugin>
<!--
Check if all files contain Apache headers in them.
Ignore this plugin, we use license-maven-plugin to check apache header.
-->
<plugin>
<groupId>org.apache.rat</groupId>
<artifactId>apache-rat-plugin</artifactId>
<executions>
<execution>
<id>license-check</id>
<phase>verify</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>au.com.acegi</groupId>
<artifactId>xml-format-maven-plugin</artifactId>
<version>3.0.7</version>
<executions>
<execution>
<id>xml-format</id>
<phase>compile</phase>
<goals>
<goal>xml-format</goal>
</goals>
<configuration>
<!-- configure your formatting preferences here (see link below) -->
<indentSize>4</indentSize>
<excludes>
<exclude>**/target/**</exclude>
<exclude>**/checkstyle.xml</exclude>
<exclude>**/import-control.xml</exclude>
</excludes>
</configuration>
</execution>
</executions>
</plugin>
<!--
Generate the legally required text files in the jars
-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-remote-resources-plugin</artifactId>
<executions>
<execution>
<id>process-resource-bundles</id>
<goals>
<goal>process</goal>
</goals>
<configuration>
<resourceBundles>
<!-- Will generate META-INF/{DEPENDENCIES,LICENSE,NOTICE} -->
<resourceBundle>org.apache:apache-jar-resource-bundle:1.4</resourceBundle>
</resourceBundles>
<!-- Content in this directory will be appended to generated resources -->
<appendedResourcesDirectory>${basedir}/src/remote-resources</appendedResourcesDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<!-- Separates the unit tests from the integration tests. -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<id>unit-tests</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<includes>
<!-- Include unit tests within integration-test phase. -->
<include>src/test/**/*Test.java</include>
</includes>
<excludes>
<!-- Exclude integration tests within (unit) test phase. -->
<exclude>src/test/**/*IT.java</exclude>
</excludes>
</configuration>
</execution>
<execution>
<id>integration-tests</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<includes>
<!-- Include integration tests within integration-test phase. -->
<include>src/test/**/*IT.java</include>
</includes>
<excludes>
<!-- Exclude unit tests within (unit) test phase. -->
<exclude>src/test/**/*Test.java</exclude>
</excludes>
</configuration>
</execution>
</executions>
</plugin>
<!-- Also package the sources as jar -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>create-source-package</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<profiles>
<!-- spotless is too slow, so we put it into a profile to skip it if needed -->
<!-- currently spotless cannot run on jdk16, due to JEP 396: Strongly Encapsulate JDK Internals by Default-->
<profile>
<id>spotless</id>
<activation>
<!-- activeByDefault does not take effect-->
<jdk>[1.8,16)</jdk>
<file>
<exists>.</exists>
</file>
</activation>
<build>
<plugins>
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</profile>
<!--
A set of profiles defining the different properties needed to download and run thrift
They are automatically activated depending on the OS you are using.
-->
<profile>
<id>windows</id>
<activation>
<os>
<family>windows</family>
</os>
</activation>
<properties>
<os.classifier>windows-x86_64</os.classifier>
<thrift.download-url>http://archive.apache.org/dist/thrift/${thrift.version}/thrift-${thrift.version}.exe</thrift.download-url>
<thrift.executable>thrift-${thrift.version}-win-x86_64.exe</thrift.executable>
<thrift.skip-making-executable>true</thrift.skip-making-executable>
<thrift.exec-cmd.executable>echo</thrift.exec-cmd.executable>
<thrift.exec-cmd.args>"Do nothing"</thrift.exec-cmd.args>
</properties>
</profile>
<!-- Has to be listed before "mac" as it seems a mac is both "mac" and "unix" -->
<profile>
<id>unix</id>
<activation>
<os>
<family>unix</family>
</os>
</activation>
<properties>
<os.classifier>linux-x86_64</os.classifier>
<thrift.download-url>https://github.com/apache/iotdb-bin-resources/raw/main/compile-tools/thrift-0.14-ubuntu</thrift.download-url>
<thrift.executable>thrift_0.14.1_linux.exe</thrift.executable>
<thrift.skip-making-executable>false</thrift.skip-making-executable>
<thrift.exec-cmd.executable>chmod</thrift.exec-cmd.executable>
<thrift.exec-cmd.args>+x ${project.build.directory}/tools/${thrift.executable}</thrift.exec-cmd.args>
</properties>
</profile>
<profile>
<id>mac</id>
<activation>
<os>
<family>mac</family>
</os>
</activation>
<properties>
<os.classifier>mac-x86_64</os.classifier>
<thrift.download-url>https://github.com/apache/iotdb-bin-resources/raw/main/compile-tools/thrift-0.14-MacOS</thrift.download-url>
<thrift.executable>thrift_0.14.1_mac.exe</thrift.executable>
<thrift.skip-making-executable>false</thrift.skip-making-executable>
<thrift.exec-cmd.executable>chmod</thrift.exec-cmd.executable>
<thrift.exec-cmd.args>+x ${project.build.directory}/tools/${thrift.executable}</thrift.exec-cmd.args>
</properties>
</profile>
<!-- for TestContainer. As it requires docker, we have to detect whether docker exists.-->
<profile>
<!-- Mac and Unix-->
<id>unixDockerCheck</id>
<activation>
<file>
<exists>/var/run/docker.sock</exists>
</file>
</activation>
<modules>
<module>testcontainer</module>
</modules>
</profile>
<profile>
<id>WinDockerCheck</id>
<activation>
<file>
<exists>C:\Program Files\Docker\Docker\resources\bin\docker.exe</exists>
</file>
</activation>
<modules>
<module>testcontainer</module>
</modules>
</profile>
<!-- Some APIs were removed in Java 11, so we need to add replacements -->
<profile>
<id>java-11-and-above</id>
<activation>
<!-- This needs to be updated as soon as Java 20 is shipped -->
<jdk>[11,20)</jdk>
</activation>
<properties>
<maven.compiler.release>8</maven.compiler.release>
<!-- change to 1.15.0 will modify many codes (all are javadocs), we change it to 1.15.0
until: 1. spotless + jdk16 is fixed; and 2. iotdb decides to do not support jdk8-->
<google.java.format.version>1.7</google.java.format.version>
</properties>
<dependencies>
<!-- for jdk-11 -->
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
</dependency>
</dependencies>
</profile>
<!-- Add argLine for Java 16 and above, due to [JEP 396: Strongly Encapsulate JDK Internals by Default]
(https://openjdk.java.net/jeps/396) -->
<profile>
<id>java-16-and-above</id>
<activation>
<!-- This needs to be updated as soon as Java 20 is shipped -->
<jdk>[16,20)</jdk>
</activation>
<properties>
<maven.compiler.release>8</maven.compiler.release>
<argLine>--illegal-access=permit --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</argLine>
</properties>
</profile>
<!--
Self activating profile, that activates itself as soon as a "src/main/thrift" directory is found.
The different plugins here download the thrift executable matching the current os, make that
executable (on mac and unix/linux) and run the code generation.
Note to the Download: The download-maven-plugin checks if a resource is previously downloaded
and only downloads each file once. It caches downloaded files in:
{maven local repo}/.cache/download-maven-plugin
-->
<profile>
<id>thrift-generation</id>
<activation>
<file>
<exists>src/main/thrift</exists>
</file>
</activation>
<properties>
<thrift.exec.absolute.path>${project.build.directory}/tools/${thrift.executable}</thrift.exec.absolute.path>
</properties>
<build>
<plugins>
<plugin>
<groupId>com.googlecode.maven-download-plugin</groupId>
<artifactId>download-maven-plugin</artifactId>
<version>1.6.7</version>
<executions>
<execution>
<id>get-thrift-executable</id>
<phase>generate-sources</phase>
<goals>
<goal>wget</goal>
</goals>
<configuration>
<url>${thrift.download-url}</url>
<outputDirectory>${project.build.directory}/tools</outputDirectory>
<outputFileName>${thrift.executable}</outputFileName>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<id>make-thrift-executable-executable</id>
<phase>generate-sources</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<skip>${thrift.skip-making-executable}</skip>
<executable>${thrift.exec-cmd.executable}</executable>
<commandlineArgs>${thrift.exec-cmd.args}</commandlineArgs>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.thrift.tools</groupId>
<artifactId>maven-thrift-plugin</artifactId>
<version>0.1.11</version>
<executions>
<execution>
<id>generate-thrift-sources-java</id>
<phase>generate-sources</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<generator>java</generator>
<thriftExecutable>${thrift.exec.absolute.path}</thriftExecutable>
<thriftSourceRoot>${basedir}/src/main/thrift</thriftSourceRoot>
</configuration>
</execution>
<execution>
<id>generate-thrift-sources-python</id>
<phase>generate-sources</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<generator>py</generator>
<thriftExecutable>${thrift.exec.absolute.path}</thriftExecutable>
<thriftSourceRoot>${basedir}/src/main/thrift</thriftSourceRoot>
<outputDirectory>${project.build.directory}/generated-sources-python/</outputDirectory>
</configuration>
</execution>
<execution>
<id>generate-thrift-sources-go</id>
<phase>generate-sources</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<generator>go</generator>
<thriftExecutable>${thrift.exec.absolute.path}</thriftExecutable>
<thriftSourceRoot>${basedir}/src/main/thrift</thriftSourceRoot>
<outputDirectory>${project.build.directory}/generated-sources-go</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!-- Make sure the source assembly has the right name -->
<profile>
<id>apache-release</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>${maven.assembly.version}</version>
<executions>
<execution>
<id>source-release-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<!-- heads up: combine.self in the following is highlighted
as an error in Eclipse's xml editor view.
Just ignore that.
See https://issues.apache.org/jira/browse/MNG-5454 sigh.
-->
<configuration combine.self="append">
<finalName>apache-iotdb-${project.version}</finalName>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
</archive>
</configuration>
</execution>
</executions>
</plugin>
<!--
Create SHA512 checksum files for the release artifacts.
-->
<plugin>
<groupId>net.nicoulaj.maven.plugins</groupId>
<artifactId>checksum-maven-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>sign-source-release</id>
<phase>package</phase>
<goals>
<goal>files</goal>
</goals>
<configuration>
<algorithms>
<algorithm>SHA-512</algorithm>
</algorithms>
<fileSets>
<fileSet>
<directory>${project.build.directory}</directory>
<includes>
<include>apache-iotdb-${project.version}-source-release.zip</include>
</includes>
</fileSet>
</fileSets>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!-- enable site-->
<!-- use `mvn package -P site -pl site` to compile the site module only -->
<profile>
<id>site</id>
<modules>
<module>site</module>
</modules>
</profile>
<!-- code coverage for ut and it, and then merge them together.-->
<profile>
<id>code-coverage</id>
<modules>
<module>code-coverage</module>
</modules>
<build>
<plugins>
<!-- Jacoco is a code coverage analysis plugin when tests run.
(not a static code analysis tool)-->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.7</version>
<configuration>
<excludes>
<exclude>org/apache/iotdb/service/sync/thrift/*</exclude>
<exclude>org/apache/iotdb/service/rpc/thrift/*</exclude>
<exclude>org/apache/iotdb/protocol/influxdb/rpc/thrift/*</exclude>
<exclude>org/apache/iotdb/db/qp/sql/*</exclude>
</excludes>
<rules>
<rule implementation="org.jacoco.maven.RuleConfiguration">
<element>BUNDLE</element>
<limits>  
<!-- Cover methodes >=30%. (the plugin does not support
ignore getter and setter and toString etc..) -->
<limit implementation="org.jacoco.report.check.Limit">
<counter>METHOD</counter>
<value>COVEREDRATIO</value>
<minimum>0.00</minimum>
</limit>
<!-- if-else, swtich etc.. >=70% -->
<limit implementation="org.jacoco.report.check.Limit">
<counter>BRANCH</counter>
<value>COVEREDRATIO</value>
<minimum>0.00</minimum>
</limit>
<!-- class files >=95% -->
<limit implementation="org.jacoco.report.check.Limit">
<counter>CLASS</counter>
<value>COVEREDRATIO</value>
<minimum>0.00</minimum>
</limit>
</limits>
</rule>
</rules>
</configuration>
<executions>
<!-- see https://natritmeyer.com/howto/reporting-aggregated-unit-and-integration-test-coverage-with-jacoco/-->
<!-- For UT-->
<execution>
<id>prepare-ut</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<destFile>${project.build.directory}/${project.build.finalName}-jacoco-unit-tests.exec</destFile>
<propertyName>surefire.jacoco.args</propertyName>
</configuration>
</execution>
<!-- attached to Maven test phase -->
<execution>
<id>ut-report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
<goal>check</goal>
</goals>
<configuration>
<dataFile>${project.build.directory}/${project.build.finalName}-jacoco-unit-tests.exec</dataFile>
<outputDirectory>${project.build.directory}/jacoco-unit-reports</outputDirectory>
</configuration>
</execution>
<!-- For IT-->
<execution>
<id>before-integration-test-execution</id>
<phase>pre-integration-test</phase>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<destFile>${project.build.directory}/${project.build.finalName}-jacoco-integration-tests.exec</destFile>
<propertyName>failsafe.jacoco.args</propertyName>
</configuration>
</execution>
<execution>
<id>after-integration-test-execution</id>
<phase>integration-test</phase>
<goals>
<goal>report</goal>
<goal>check</goal>
</goals>
<configuration>
<dataFile>${project.build.directory}/${project.build.finalName}-jacoco-integration-tests.exec</dataFile>
<outputDirectory>${project.build.directory}/jacoco-integration-reports</outputDirectory>
</configuration>
</execution>
<execution>
<id>merge-unit-and-integration</id>
<phase>post-integration-test</phase>
<goals>
<goal>merge</goal>
</goals>
<configuration>
<fileSets>
<fileSet>
<directory>${project.build.directory}/</directory>
<includes>
<include>*.exec</include>
</includes>
</fileSet>
</fileSets>
<destFile>${project.build.directory}/${project.build.finalName}-merged.exec</destFile>
</configuration>
</execution>
<execution>
<id>create-merged-report</id>
<phase>post-integration-test</phase>
<goals>
<goal>report</goal>
<goal>check</goal>
</goals>
<configuration>
<dataFile>${project.build.directory}/${project.build.finalName}-merged.exec</dataFile>
<outputDirectory>${project.build.directory}/jacoco-merged-reports</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<!-- overwrite argLine-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>${argLine} @{surefire.jacoco.args} -Xmx1024m</argLine>
</configuration>
</plugin>
<!-- for IT-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<argLine>${argLine} @{failsafe.jacoco.args} -Xmx1024m</argLine>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!-- upload code coverage report to coveralls.io-->
<!-- to enable coveralls locally, you need to get the repoToken from https://coveralls.io/github/apache/iotdb.
use `mvn post-integration-test -Pcode-coverage -DrepoToken=TOKEN`-->
<profile>
<id>enforce</id>
<properties>
<enforcer.skip>false</enforcer.skip>
</properties>
</profile>
</profiles>
</project>