<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Copyright 2024 Apollo Authors
  ~
  ~ 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>

	<groupId>com.ctrip.framework.apollo</groupId>
	<artifactId>apollo</artifactId>
	<version>${revision}</version>
	<name>Apollo</name>
	<packaging>pom</packaging>
	<description>Configuration Center</description>
	<url>https://github.com/apolloconfig/apollo</url>

	<licenses>
		<license>
			<name>Apache License, Version 2.0</name>
			<url>http://www.apache.org/licenses/LICENSE-2.0</url>
		</license>
	</licenses>

	<scm>
		<url>https://github.com/apolloconfig/apollo</url>
		<connection>scm:git:git@github.com:apolloconfig/apollo.git</connection>
		<developerConnection>scm:git:ssh://git@github.com:apolloconfig/apollo.git</developerConnection>
	</scm>

	<ciManagement>
		<system>GitHub Actions</system>
		<url>https://github.com/apolloconfig/apollo/actions</url>
	</ciManagement>

	<issueManagement>
		<system>github</system>
		<url>https://github.com/apolloconfig/apollo/issues</url>
	</issueManagement>

	<developers>
		<developer>
			<id>apollo</id>
			<name>The Apollo Project Contributors</name>
			<email>apollo-config@googlegroups.com</email>
			<url>https://www.apolloconfig.com/</url>
		</developer>
	</developers>

	<properties>
		<revision>2.4.0-SNAPSHOT</revision>
		<java.version>1.8</java.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<apollo-java.version>2.4.0-SNAPSHOT</apollo-java.version>
		<spring-boot.version>2.7.11</spring-boot.version>
		<spring-cloud.version>2021.0.5</spring-cloud.version>
		<!-- sort by alphabet -->
		<awaitility.version>4.2.0</awaitility.version>
		<common-lang3.version>3.12.0</common-lang3.version>
		<gson.version>2.10.1</gson.version>
		<guava.version>32.0.0-jre</guava.version>
		<javassist.version>3.23.1-GA</javassist.version>
		<javax.activation.version>1.1.1</javax.activation.version>
		<javax.mail.version>1.6.2</javax.mail.version>
		<jaxb.version>2.3.1</jaxb.version>
		<junit.version>5.9.2</junit.version>
		<nacos-discovery-api.version>1.4.0</nacos-discovery-api.version>
		<!-- database driver -->
		<mysql-connector-j.version>8.2.0</mysql-connector-j.version>
		<postgre.version>42.7.2</postgre.version>
		<!-- Plugins Version sort by alphabet -->
		<maven-assembly-plugin.version>3.3.0</maven-assembly-plugin.version>
		<maven-compiler-plugin.version>3.10.1</maven-compiler-plugin.version>
		<maven-deploy-plugin.version>2.8.2</maven-deploy-plugin.version>
		<maven-gpg-plugin.version>3.0.1</maven-gpg-plugin.version>
		<maven-install-plugin.version>2.5.2</maven-install-plugin.version>
		<maven-jacoco-plugin.version>0.8.8</maven-jacoco-plugin.version>
		<maven-jar-plugin.version>3.2.2</maven-jar-plugin.version>
		<maven-javadoc-plugin.version>3.4.0</maven-javadoc-plugin.version>
		<maven-war-plugin.version>3.3.2</maven-war-plugin.version>
		<maven-source-plugin.version>3.2.1</maven-source-plugin.version>
		<maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
	</properties>

	<modules>
		<module>apollo-build-sql-converter</module>
		<module>apollo-buildtools</module>
		<module>apollo-common</module>
		<module>apollo-biz</module>
		<module>apollo-configservice</module>
		<module>apollo-adminservice</module>
		<module>apollo-portal</module>
		<module>apollo-assembly</module>
    <module>apollo-audit</module>
  </modules>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>com.ctrip.framework.apollo</groupId>
				<artifactId>apollo-core</artifactId>
				<version>${apollo-java.version}</version>
			</dependency>
			<dependency>
				<groupId>com.ctrip.framework.apollo</groupId>
				<artifactId>apollo-common</artifactId>
				<version>${project.version}</version>
			</dependency>
			<dependency>
				<groupId>com.ctrip.framework.apollo</groupId>
				<artifactId>apollo-biz</artifactId>
				<version>${project.version}</version>
			</dependency>
			<dependency>
				<groupId>com.ctrip.framework.apollo</groupId>
				<artifactId>apollo-buildtools</artifactId>
				<version>${project.version}</version>
			</dependency>
			<dependency>
				<groupId>com.ctrip.framework.apollo</groupId>
				<artifactId>apollo-configservice</artifactId>
				<version>${project.version}</version>
			</dependency>
			<dependency>
				<groupId>com.ctrip.framework.apollo</groupId>
				<artifactId>apollo-adminservice</artifactId>
				<version>${project.version}</version>
			</dependency>
			<dependency>
				<groupId>com.ctrip.framework.apollo</groupId>
				<artifactId>apollo-portal</artifactId>
				<version>${project.version}</version>
			</dependency>
			<dependency>
				<groupId>com.ctrip.framework.apollo</groupId>
				<artifactId>apollo-openapi</artifactId>
				<version>${apollo-java.version}</version>
			</dependency>
			<!--audit log module -->
			<dependency>
				<groupId>com.ctrip.framework.apollo</groupId>
				<artifactId>apollo-audit-annotation</artifactId>
				<version>${project.version}</version>
			</dependency>
			<dependency>
				<groupId>com.ctrip.framework.apollo</groupId>
				<artifactId>apollo-audit-impl</artifactId>
				<version>${project.version}</version>
			</dependency>
			<dependency>
				<groupId>com.ctrip.framework.apollo</groupId>
				<artifactId>apollo-audit-api</artifactId>
				<version>${project.version}</version>
			</dependency>
			<dependency>
				<groupId>com.ctrip.framework.apollo</groupId>
				<artifactId>apollo-audit-spring-boot-starter</artifactId>
				<version>${project.version}</version>
			</dependency>
			<!--third party -->
			<dependency>
				<groupId>com.google.guava</groupId>
				<artifactId>guava</artifactId>
				<version>${guava.version}</version>
			</dependency>
			<dependency>
				<groupId>com.google.code.gson</groupId>
				<artifactId>gson</artifactId>
				<version>${gson.version}</version>
			</dependency>
			<dependency>
				<groupId>com.mysql</groupId>
				<artifactId>mysql-connector-j</artifactId>
				<version>${mysql-connector-j.version}</version>
			</dependency>
			<dependency>
				<groupId>org.postgresql</groupId>
				<artifactId>postgresql</artifactId>
				<version>${postgre.version}</version>
			</dependency>
			<dependency>
				<groupId>com.google.inject</groupId>
				<artifactId>guice</artifactId>
				<version>5.0.1</version>
			</dependency>
			<dependency>
				<groupId>org.apache.commons</groupId>
				<artifactId>commons-lang3</artifactId>
				<version>${common-lang3.version}</version>
			</dependency>
			<!-- to fix CVE-2024-47072 -->
			<dependency>
				<groupId>com.thoughtworks.xstream</groupId>
				<artifactId>xstream</artifactId>
				<version>1.4.21</version>
			</dependency>
			<!--for test -->
			<dependency>
				<groupId>org.awaitility</groupId>
				<artifactId>awaitility</artifactId>
				<version>${awaitility.version}</version>
				<scope>test</scope>
			</dependency>
			<dependency>
				<groupId>org.junit.vintage</groupId>
				<artifactId>junit-vintage-engine</artifactId>
				<version>${junit.version}</version>
				<scope>test</scope>
			</dependency>
			<dependency>
				<groupId>com.github.stefanbirkner</groupId>
				<artifactId>system-lambda</artifactId>
				<version>1.2.0</version>
				<scope>test</scope>
			</dependency>
			<!-- declare Spring BOMs in order -->
			<dependency>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-dependencies</artifactId>
				<version>${spring-boot.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
			<!-- required by eureka -->
			<dependency>
				<groupId>com.sun.jersey.contribs</groupId>
				<artifactId>jersey-apache-client4</artifactId>
				<version>1.19.4</version>
			</dependency>
			<!-- JDK 1.8+ -->
			<dependency>
				<groupId>javax.xml.bind</groupId>
				<artifactId>jaxb-api</artifactId>
				<version>${jaxb.version}</version>
			</dependency>
			<dependency>
				<groupId>com.sun.xml.bind</groupId>
				<artifactId>jaxb-impl</artifactId>
				<version>${jaxb.version}</version>
			</dependency>
			<dependency>
				<groupId>org.glassfish.jaxb</groupId>
				<artifactId>jaxb-runtime</artifactId>
				<version>${jaxb.version}</version>
			</dependency>
			<dependency>
				<groupId>javax.activation</groupId>
				<artifactId>activation</artifactId>
				<version>${javax.activation.version}</version>
			</dependency>
			<dependency>
				<groupId>com.sun.mail</groupId>
				<artifactId>javax.mail</artifactId>
				<version>${javax.mail.version}</version>
			</dependency>
			<!-- JDK 11+ -->
			<dependency>
				<groupId>org.javassist</groupId>
				<artifactId>javassist</artifactId>
				<version>${javassist.version}</version>
			</dependency>
			<!-- end of JDK 11+ -->
		</dependencies>
	</dependencyManagement>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<artifactId>spring-boot-starter</artifactId>
					<groupId>org.springframework.boot</groupId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.awaitility</groupId>
			<artifactId>awaitility</artifactId>
			<scope>test</scope>
		</dependency>
		<!-- for junit 4 -->
		<dependency>
			<groupId>org.junit.vintage</groupId>
			<artifactId>junit-vintage-engine</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.hamcrest</groupId>
					<artifactId>hamcrest-core</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>

	<build>
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-compiler-plugin</artifactId>
					<version>${maven-compiler-plugin.version}</version>
					<configuration>
						<source>${java.version}</source>
						<target>${java.version}</target>
						<encoding>${project.build.sourceEncoding}</encoding>
					</configuration>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-surefire-plugin</artifactId>
					<version>${maven-surefire-plugin.version}</version>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-source-plugin</artifactId>
					<version>${maven-source-plugin.version}</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-jar-plugin</artifactId>
					<version>${maven-jar-plugin.version}</version>
				</plugin>
				<plugin>
					<artifactId>maven-javadoc-plugin</artifactId>
					<version>${maven-javadoc-plugin.version}</version>
					<executions>
						<execution>
							<id>attach-javadoc</id>
							<goals>
								<goal>jar</goal>
							</goals>
							<configuration>
								<doclint>none</doclint>
							</configuration>
						</execution>
					</executions>
					<configuration>
						<show>public</show>
						<charset>UTF-8</charset>
						<encoding>UTF-8</encoding>
						<docencoding>UTF-8</docencoding>
						<links>
							<link>http://docs.oracle.com/javase/7/docs/api</link>
						</links>
					</configuration>
				</plugin>

				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-war-plugin</artifactId>
					<version>${maven-war-plugin.version}</version>
				</plugin>

				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-install-plugin</artifactId>
					<version>${maven-install-plugin.version}</version>
				</plugin>

				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-deploy-plugin</artifactId>
					<version>${maven-deploy-plugin.version}</version>
				</plugin>

				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-gpg-plugin</artifactId>
					<version>${maven-gpg-plugin.version}</version>
					<configuration>
						<!-- Prevent gpg from using pinentry programs -->
						<gpgArguments>
							<arg>--pinentry-mode</arg>
							<arg>loopback</arg>
						</gpgArguments>
					</configuration>
					<executions>
						<execution>
							<phase>verify</phase>
							<goals>
								<goal>sign</goal>
							</goals>
						</execution>
					</executions>
				</plugin>
				<plugin>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-maven-plugin</artifactId>
					<version>${spring-boot.version}</version>
					<configuration>
						<executable>true</executable>
						<attach>false</attach>
					</configuration>
					<executions>
						<execution>
							<goals>
								<goal>repackage</goal>
							</goals>
						</execution>
					</executions>
				</plugin>
				<plugin>
					<groupId>org.codehaus.mojo</groupId>
					<artifactId>findbugs-maven-plugin</artifactId>
					<version>3.0.3</version>
					<configuration>
						<xmlOutput>true</xmlOutput>
						<effort>Max</effort>
						<threshold>Low</threshold>
						<failOnError>false</failOnError>
					</configuration>
				</plugin>
				<plugin>
					<groupId>org.codehaus.mojo</groupId>
					<artifactId>cobertura-maven-plugin</artifactId>
					<version>2.7</version>
					<dependencies>
						<dependency>
							<groupId>ch.qos.logback</groupId>
							<artifactId>logback-classic</artifactId>
							<version>1.3.12</version>
						</dependency>
					</dependencies>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-assembly-plugin</artifactId>
					<version>${maven-assembly-plugin.version}</version>
				</plugin>
				<plugin>
					<groupId>org.codehaus.mojo</groupId>
					<artifactId>versions-maven-plugin</artifactId>
					<version>2.2</version>
				</plugin>
				<plugin>
					<groupId>pl.project13.maven</groupId>
					<artifactId>git-commit-id-plugin</artifactId>
					<version>2.2.6</version>
					<executions>
						<execution>
							<goals>
								<goal>revision</goal>
							</goals>
						</execution>
					</executions>
					<configuration>
						<verbose>true</verbose>
						<dateFormat>yyyy-MM-dd'T'HH:mm:ssZ</dateFormat>
						<generateGitPropertiesFile>true</generateGitPropertiesFile>
						<generateGitPropertiesFilename>${project.build.outputDirectory}/apollo-git.properties</generateGitPropertiesFilename>
						<failOnNoGitDirectory>false</failOnNoGitDirectory>
					</configuration>
				</plugin>
				<plugin>
					<groupId>org.codehaus.mojo</groupId>
					<artifactId>flatten-maven-plugin</artifactId>
					<version>1.1.0</version>
					<configuration>
						<updatePomFile>true</updatePomFile>
						<flattenMode>resolveCiFriendliesOnly</flattenMode>
					</configuration>
					<executions>
						<execution>
							<id>flatten</id>
							<phase>process-resources</phase>
							<goals>
								<goal>flatten</goal>
							</goals>
						</execution>
						<execution>
							<id>flatten.clean</id>
							<phase>clean</phase>
							<goals>
								<goal>clean</goal>
							</goals>
						</execution>
					</executions>
				</plugin>
				<!-- Need to set releases.repo and snapshots.repo properties in your .m2/settings.xml -->
			</plugins>
		</pluginManagement>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<trimStackTrace>false</trimStackTrace>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-source-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-install-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-deploy-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>findbugs-maven-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>versions-maven-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<configuration>
					<archive>
						<manifest>
							<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
							<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
						</manifest>
					</archive>
				</configuration>
			</plugin>
			<plugin>
				<groupId>pl.project13.maven</groupId>
				<artifactId>git-commit-id-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>flatten-maven-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.jacoco</groupId>
				<artifactId>jacoco-maven-plugin</artifactId>
				<version>${maven-jacoco-plugin.version}</version>
				<executions>
					<execution>
						<id>prepare-agent</id>
						<goals>
							<goal>prepare-agent</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
		<resources>
			<resource>
				<directory>src/main/resources</directory>
				<filtering>true</filtering>
				<includes>
					<include>**/*.yml</include>
					<include>**/*.yaml</include>
					<include>**/*.properties</include>
					<include>**/*.xml</include>
				</includes>
			</resource>
			<resource>
				<directory>src/main/resources</directory>
				<filtering>false</filtering>
				<excludes>
					<exclude>**/*.yml</exclude>
					<exclude>**/*.yaml</exclude>
					<exclude>**/*.properties</exclude>
					<exclude>**/*.xml</exclude>
				</excludes>
			</resource>
		</resources>
	</build>
	<profiles>
		<profile>
			<!-- for open source usage -->
			<id>github</id>
			<properties>
				<package.environment>github</package.environment>
			</properties>
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
		</profile>
		<profile>
			<id>nacos-discovery</id>
			<properties>
				<nacos.discovery.version>0.2.12</nacos.discovery.version>
				<fastjson.version>1.2.83</fastjson.version>
			</properties>
			<dependencyManagement>
				<dependencies>
					<dependency>
						<groupId>com.alibaba.boot</groupId>
						<artifactId>nacos-discovery-spring-boot-starter</artifactId>
						<version>${nacos.discovery.version}</version>
					</dependency>
					<dependency>
						<groupId>com.alibaba</groupId>
						<artifactId>fastjson</artifactId>
						<version>${fastjson.version}</version>
					</dependency>
				</dependencies>
			</dependencyManagement>
		</profile>
	</profiles>

	<repositories>
		<!-- for apollo-core and apollo-openapi snapshot versions -->
		<repository>
			<id>sonatype-nexus-snapshots</id>
			<url>https://oss.sonatype.org/content/repositories/snapshots</url>
			<releases>
				<enabled>false</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
				<updatePolicy>always</updatePolicy>
			</snapshots>
		</repository>
	</repositories>
</project>
