<?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>
		<artifactId>flink-connectors</artifactId>
		<groupId>org.apache.flink</groupId>
		<version>1.15-SNAPSHOT</version>
		<relativePath>..</relativePath>
	</parent>

	<artifactId>flink-connector-pulsar</artifactId>
	<name>Flink : Connectors : Pulsar</name>

	<packaging>jar</packaging>

	<properties>
		<pulsar.version>2.10.2</pulsar.version>

		<!-- Test Libraries -->
		<protobuf-maven-plugin.version>0.6.1</protobuf-maven-plugin.version>
		<os-maven-plugin.version>1.7.0</os-maven-plugin.version>
		<pulsar-commons-lang3.version>3.11</pulsar-commons-lang3.version>
		<pulsar-netty.version>4.1.77.Final</pulsar-netty.version>
		<pulsar-grpc.version>1.45.1</pulsar-grpc.version>
		<pulsar-caffeine.version>2.9.1</pulsar-caffeine.version>
	</properties>

	<dependencies>

		<!-- Core -->

		<dependency>
			<groupId>org.apache.flink</groupId>
			<artifactId>flink-connector-base</artifactId>
			<version>${project.version}</version>
		</dependency>

		<!-- Connectors -->

		<dependency>
			<groupId>org.apache.flink</groupId>
			<artifactId>flink-streaming-java</artifactId>
			<version>${project.version}</version>
			<scope>provided</scope>
		</dependency>

		<!-- Protobuf & Protobuf Native Schema support. Add it to your pom if you need protobuf -->

		<dependency>
			<groupId>com.google.protobuf</groupId>
			<artifactId>protobuf-java</artifactId>
			<version>${protoc.version}</version>
			<scope>provided</scope>
			<optional>true</optional>
		</dependency>

		<!-- Tests -->

		<dependency>
			<groupId>org.apache.flink</groupId>
			<artifactId>flink-core</artifactId>
			<version>${project.version}</version>
			<scope>test</scope>
			<type>test-jar</type>
		</dependency>

		<dependency>
			<groupId>org.apache.flink</groupId>
			<artifactId>flink-streaming-java</artifactId>
			<version>${project.version}</version>
			<scope>test</scope>
			<type>test-jar</type>
		</dependency>

		<dependency>
			<groupId>org.apache.flink</groupId>
			<artifactId>flink-tests</artifactId>
			<version>${project.version}</version>
			<type>test-jar</type>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.apache.flink</groupId>
			<artifactId>flink-connector-test-utils</artifactId>
			<version>${project.version}</version>
			<scope>test</scope>
		</dependency>

		<!-- Pulsar testing environment -->

		<dependency>
			<groupId>org.testcontainers</groupId>
			<artifactId>pulsar</artifactId>
			<scope>test</scope>
		</dependency>

		<!-- Pulsar bundles the latest bookkeeper -->
		<!-- we don't override the version here. -->
		<dependency>
			<groupId>org.apache.pulsar</groupId>
			<artifactId>testmocks</artifactId>
			<version>${pulsar.version}</version>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.testng</groupId>
					<artifactId>testng</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.powermock</groupId>
					<artifactId>powermock-module-testng</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.zookeeper</groupId>
					<artifactId>zookeeper</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.apache.pulsar</groupId>
			<artifactId>pulsar-broker</artifactId>
			<version>${pulsar.version}</version>
			<scope>test</scope>
		</dependency>

		<!-- Pulsar use a newer commons-lang3 in broker. -->
		<!-- Bump the version only for testing. -->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>${pulsar-commons-lang3.version}</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>com.github.ben-manes.caffeine</groupId>
			<artifactId>caffeine</artifactId>
			<version>${pulsar-caffeine.version}</version>
			<scope>test</scope>
		</dependency>

		<!-- Add Pulsar 2.x as a dependency. -->
		<!-- Move this to button for avoiding class conflicts with pulsar-broker. -->

		<dependency>
			<groupId>org.apache.pulsar</groupId>
			<artifactId>pulsar-client-all</artifactId>
			<version>${pulsar.version}</version>
			<exclusions>
				<exclusion>
					<groupId>com.sun.activation</groupId>
					<artifactId>javax.activation</artifactId>
				</exclusion>
				<exclusion>
					<groupId>jakarta.activation</groupId>
					<artifactId>jakarta.activation-api</artifactId>
				</exclusion>
				<exclusion>
					<groupId>jakarta.ws.rs</groupId>
					<artifactId>jakarta.ws.rs-api</artifactId>
				</exclusion>
				<exclusion>
					<groupId>jakarta.xml.bind</groupId>
					<artifactId>jakarta.xml.bind-api</artifactId>
				</exclusion>
				<exclusion>
					<groupId>javax.validation</groupId>
					<artifactId>validation-api</artifactId>
				</exclusion>
				<exclusion>
					<groupId>net.jcip</groupId>
					<artifactId>jcip-annotations</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.pulsar</groupId>
					<artifactId>pulsar-package-core</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.beust</groupId>
					<artifactId>jcommander</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<!-- ArchUit test dependencies -->

		<dependency>
			<groupId>org.apache.flink</groupId>
			<artifactId>flink-architecture-tests-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>


	<dependencyManagement>
		<dependencies>
			<!-- Pulsar use higher gRPC version. -->
			<dependency>
				<groupId>io.grpc</groupId>
				<artifactId>grpc-bom</artifactId>
				<version>${pulsar-grpc.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>

			<!-- Pulsar use higher netty version. -->
			<dependency>
				<groupId>io.netty</groupId>
				<artifactId>netty-bom</artifactId>
				<version>${pulsar-netty.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<extensions>
			<extension>
				<groupId>kr.motd.maven</groupId>
				<artifactId>os-maven-plugin</artifactId>
				<version>${os-maven-plugin.version}</version>
			</extension>
		</extensions>

		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<!-- Enforce single fork execution due to heavy mini cluster use in the tests -->
					<forkCount>1</forkCount>
					<argLine>-Xms256m -Xmx2048m -Dmvn.forkNumber=${surefire.forkNumber}
						-XX:-UseGCOverheadLimit -Duser.country=US -Duser.language=en
					</argLine>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.xolstice.maven.plugins</groupId>
				<artifactId>protobuf-maven-plugin</artifactId>
				<version>${protobuf-maven-plugin.version}</version>
				<extensions>true</extensions>
				<configuration>
					<!-- Currently Flink azure test pipeline would first pre-compile and then upload the compiled
					 directory, then it download the directory and run the corresponding tests. However, the protoc
					 executable under the target directory would lost the execution permission bit after downloading.
					 To solve this issue we would skip generating the target files if they already exist after
					 downloading. Meanwhile, since the time might be not consistent between the pre-compile and
					 the actual execution, we need to adjust the timestamp manually, see unpack_build_artifact.sh-->
					<checkStaleness>true</checkStaleness>
					<protoTestSourceRoot>${project.basedir}/src/test/resources/protobuf
					</protoTestSourceRoot>
					<!-- Generates classes into a separate directory since the generator always removes existing files. -->
					<outputDirectory>
						${project.build.directory}/generated-test-sources/protobuf/java
					</outputDirectory>
					<protocArtifact>
						com.google.protobuf:protoc:${protoc.version}:exe:${os.detected.classifier}
					</protocArtifact>
				</configuration>
				<executions>
					<execution>
						<phase>generate-sources</phase>
						<goals>
							<goal>test-compile</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
			<!-- Adding protobuf generated classes to test build path -->
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>build-helper-maven-plugin</artifactId>
				<executions>
					<execution>
						<id>add-test-source</id>
						<phase>generate-sources</phase>
						<goals>
							<goal>add-test-source</goal>
						</goals>
						<configuration>
							<sources>
								<source>
									${project.build.directory}/generated-test-sources/protobuf/java
								</source>
							</sources>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<executions>
					<execution>
						<goals>
							<goal>test-jar</goal>
						</goals>
						<configuration>
							<includes>
								<include>**/testutils/**</include>
								<include>META-INF/LICENSE</include>
								<include>META-INF/NOTICE</include>
							</includes>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-source-plugin</artifactId>
				<executions>
					<execution>
						<id>attach-test-sources</id>
						<goals>
							<goal>test-jar-no-fork</goal>
						</goals>
						<configuration>
							<archive>
								<!-- Globally exclude maven metadata, because it may accidentally bundle files we don't intend to -->
								<addMavenDescriptor>false</addMavenDescriptor>
							</archive>
							<includes>
								<include>**/testutils/**</include>
								<include>META-INF/LICENSE</include>
								<include>META-INF/NOTICE</include>
							</includes>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>
