<!--

     Licensed 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/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<artifactId>traffic_router</artifactId>
	<groupId>org.apache.traffic_control.traffic_router</groupId>
	<version>7.0.1</version>
	<packaging>pom</packaging>
	<name>traffic_router</name>

	<modules>
		<module>shared</module>
		<module>connector</module>
		<module>configuration</module>
		<module>geolocation</module>
		<module>core</module>
	</modules>

	<properties>
		<deploy.dir>/opt/traffic_router</deploy.dir>
		<spring.version>5.3.20</spring.version>
		<log4j.version>2.17.1</log4j.version>
		<jackson-core.version>2.13.1</jackson-core.version>
		<junit.version>4.12</junit.version>
		<hamcrest.version>1.3</hamcrest.version>
		<geoip2.version>2.1.0</geoip2.version>
		<commons-lang3.version>3.3.2</commons-lang3.version>
		<commons-compress.version>1.9</commons-compress.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<java.version>11</java.version>
	</properties>

	<scm>
		<connection>scm:git:file://</connection>
		<developerConnection>scm:git:file://</developerConnection>
	</scm>

	<repositories>
		<repository>
			<id>cloudera</id>
			<url>https://repository.cloudera.com/content/repositories/releases</url>
		</repository>
	</repositories>

	<build>
		<plugins>
			<plugin>
				<inherited>true</inherited>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.3</version>
				<configuration>
					<source>${java.version}</source>
					<target>${java.version}</target>
					<encoding>UTF-8</encoding>
					<showWarnings>true</showWarnings>
					<showDeprecation>true</showDeprecation>
				</configuration>
			</plugin>
		</plugins>
	</build>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.hamcrest</groupId>
				<artifactId>hamcrest-all</artifactId>
				<version>1.3</version>
				<scope>test</scope>
			</dependency>
			<dependency>
				<groupId>org.powermock</groupId>
				<artifactId>powermock-api-mockito2</artifactId>
				<version>2.0.9</version>
				<scope>test</scope>
			</dependency>
			<dependency>
				<groupId>org.mockito</groupId>
				<artifactId>mockito-core</artifactId>
				<version>3.11.1</version>
				<scope>test</scope>
			</dependency>
			<dependency>
				<groupId>org.powermock</groupId>
				<artifactId>powermock-module-junit4</artifactId>
				<version>2.0.9</version>
				<scope>test</scope>
			</dependency>
			<dependency>
				<groupId>junit</groupId>
				<artifactId>junit</artifactId>
				<version>4.13.1</version>
				<scope>test</scope>
			</dependency>
			<dependency>
				<groupId>org.bouncycastle</groupId>
				<artifactId>bcprov-jdk15on</artifactId>
				<version>1.68</version>
			</dependency>
		</dependencies>
	</dependencyManagement>
	<profiles>
		<profile>
			<id>rpm-build</id>
			<activation>
				<os>
					<name>linux</name>
				</os>
			</activation>
			<modules>
				<module>build</module>
			</modules>
		</profile>
		<profile>
			<id>neustar</id>
			<modules>
				<module>neustar</module>
			</modules>
		</profile>
	</profiles>
</project>
