<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>

    <groupId>ai.platon.cdt</groupId>
    <artifactId>cdt-client-root</artifactId>
    <version>4.8.2</version>
    <packaging>pom</packaging>

    <name>cdt-client-root</name>
    <description>Chrome DevTools Kotlin client</description>
    <url>https://github.com/galaxyeye/chrome-devtools-kotlin-client</url>

    <modules>
        <module>cdt-protocol-parser</module>
        <module>cdt-kotlin-protocol-builder</module>
        <module>cdt-kotlin-client</module>
        <module>cdt-kotlin-client-serialization</module>
        <module>cdt-kotlin-client-ktor</module>
        <module>cdt-kotlin-client-ktor-serialization</module>
    </modules>

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

    <scm>
        <connection>scm:git:git://github.com/galaxyeye/chrome-devtools-kotlin-client.git</connection>
        <developerConnection>scm:git:ssh://github.com/galaxyeye/chrome-devtools-kotlin-client.git</developerConnection>
        <url>https://github.com/galaxyeye/chrome-devtools-kotlin-client</url>
    </scm>

    <developers>
        <developer>
            <name>Kenan Klisura</name>
            <email>kklisura@hotmail.com</email>
        </developer>
        <developer>
            <name>Vincent Zhang</name>
            <email>ivincent.zhang@gmail.com</email>
            <organization>browser4.io</organization>
            <timezone>+8</timezone>
        </developer>
    </developers>

    <organization>
        <name>browser4.io</name>
        <url>https://browser4.io</url>
    </organization>

    <distributionManagement>
        <repository>
            <id>central</id>
            <url>https://central.sonatype.com/api/v1/publisher</url>
        </repository>
    </distributionManagement>

    <repositories>
        <repository>
            <id>Central</id>
            <url>https://repo1.maven.org/maven2/</url>
        </repository>
    </repositories>

    <dependencyManagement>
        <dependencies>
            <!-- Kotlin BOMs -->
            <dependency>
                <groupId>org.jetbrains.kotlin</groupId>
                <artifactId>kotlin-bom</artifactId>
                <version>${kotlin.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.jetbrains.kotlinx</groupId>
                <artifactId>kotlinx-coroutines-bom</artifactId>
                <version>${kotlin.coroutine.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- Jackson -->
            <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-annotations</artifactId>
                <version>${jackson.version}</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <!-- Logging -->
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>${logback.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${slf4j.version}</version>
            </dependency>

            <!-- Commons -->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-collections4</artifactId>
                <version>${commons.collections4.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>${commons.lang3.version}</version>
            </dependency>

            <!-- Lombok -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>

            <!-- Javassist -->
            <dependency>
                <groupId>org.javassist</groupId>
                <artifactId>javassist</artifactId>
                <version>${javassist.version}</version>
            </dependency>

            <!-- WebSocket -->
            <dependency>
                <groupId>javax.websocket</groupId>
                <artifactId>javax.websocket-api</artifactId>
                <version>${websocket.api.version}</version>
            </dependency>

            <!-- Metrics -->
            <dependency>
                <groupId>io.dropwizard.metrics</groupId>
                <artifactId>metrics-core</artifactId>
                <version>${metrics.core.version}</version>
            </dependency>

            <!-- Ktor (managed by BOM, but explicit for safety) -->
            <dependency>
                <groupId>io.ktor</groupId>
                <artifactId>ktor-client-core</artifactId>
                <version>${ktor.version}</version>
            </dependency>
            <dependency>
                <groupId>io.ktor</groupId>
                <artifactId>ktor-client-core-jvm</artifactId>
                <version>${ktor.version}</version>
            </dependency>
            <dependency>
                <groupId>io.ktor</groupId>
                <artifactId>ktor-client-cio</artifactId>
                <version>${ktor.version}</version>
            </dependency>
            <dependency>
                <groupId>io.ktor</groupId>
                <artifactId>ktor-client-cio-jvm</artifactId>
                <version>${ktor.version}</version>
            </dependency>
            <dependency>
                <groupId>io.ktor</groupId>
                <artifactId>ktor-client-websockets</artifactId>
                <version>${ktor.version}</version>
            </dependency>

            <!-- kotlinx.serialization -->
            <dependency>
                <groupId>org.jetbrains.kotlinx</groupId>
                <artifactId>kotlinx-serialization-json</artifactId>
                <version>${kotlinx.serialization.version}</version>
            </dependency>

            <!-- Test -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter</artifactId>
                <version>${junit.jupiter.version}</version>
            </dependency>
            <dependency>
                <groupId>org.skyscreamer</groupId>
                <artifactId>jsonassert</artifactId>
                <version>${jsonassert.version}</version>
            </dependency>
            <dependency>
                <groupId>org.easymock</groupId>
                <artifactId>easymock</artifactId>
                <version>${easymock.version}</version>
            </dependency>
            <dependency>
                <groupId>com.squareup.okhttp</groupId>
                <artifactId>mockwebserver</artifactId>
                <version>${mockwebserver.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <defaultGoal>install</defaultGoal>

        <plugins>
            <!-- Kotlin -->
            <plugin>
                <groupId>org.jetbrains.kotlin</groupId>
                <artifactId>kotlin-maven-plugin</artifactId>
                    <version>${kotlin.version}</version>
                    <executions>
                        <execution>
                            <id>compile</id>
                            <phase>compile</phase>
                            <goals>
                                <goal>compile</goal>
                            </goals>
                            <configuration>
                                <sourceDirs>
                                    <sourceDir>${project.basedir}/src/main/kotlin</sourceDir>
                                    <sourceDir>${project.basedir}/src/main/java</sourceDir>
                                </sourceDirs>
                            </configuration>
                        </execution>
                        <execution>
                            <id>test-compile</id>
                            <phase>test-compile</phase>
                            <goals>
                                <goal>test-compile</goal>
                            </goals>
                            <configuration>
                                <sourceDirs>
                                    <sourceDir>${project.basedir}/src/test/kotlin</sourceDir>
                                    <sourceDir>${project.basedir}/src/test/java</sourceDir>
                                </sourceDirs>
                            </configuration>
                        </execution>
                    </executions>
                    <configuration>
                        <args>
                            <arg>-Xjsr305=strict</arg>
                        </args>
                        <jvmTarget>${kotlin.compiler.jvmTarget}</jvmTarget>
                        <compilerPlugins>
                            <plugin>spring</plugin>
                        </compilerPlugins>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>org.jetbrains.kotlin</groupId>
                            <artifactId>kotlin-maven-allopen</artifactId>
                            <version>${kotlin.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>org.jetbrains.kotlin</groupId>
                            <artifactId>kotlin-maven-serialization</artifactId>
                            <version>${kotlin.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>

                <!-- Java compiler -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>${maven.compiler.plugin.version}</version>
                    <configuration>
                        <verbose>true</verbose>
                        <fork>true</fork>
                        <source>${java.version}</source>
                        <target>${java.version}</target>
                        <annotationProcessorPaths>
                            <path>
                                <groupId>org.projectlombok</groupId>
                                <artifactId>lombok</artifactId>
                                <version>${lombok.version}</version>
                            </path>
                        </annotationProcessorPaths>
                    </configuration>
                </plugin>
        </plugins>

        <pluginManagement>
            <plugins>
                <!-- Clean -->
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>${maven.clean.plugin.version}</version>
                </plugin>

                <!-- Exec -->
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>${maven.exec.plugin.version}</version>
                </plugin>

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

                <!-- Javadoc -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <version>${maven.javadoc.plugin.version}</version>
                    <configuration>
                        <doclint>none</doclint>
                    </configuration>
                </plugin>

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

                <!-- Dependency -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <version>3.6.1</version>
                </plugin>

                <!-- License header -->
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>license-maven-plugin</artifactId>
                    <version>${license.maven.plugin.version}</version>
                    <executions>
                        <execution>
                            <id>update-file-header</id>
                            <goals>
                                <goal>update-file-header</goal>
                            </goals>
                            <phase>process-sources</phase>
                        </execution>
                        <execution>
                            <id>attach-licenses</id>
                            <goals>
                                <goal>update-project-license</goal>
                                <goal>add-third-party</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <outputDirectory>${project.basedir}</outputDirectory>
                        <canUpdateCopyright>true</canUpdateCopyright>
                        <failOnMissing>true</failOnMissing>
                        <licenseName>apache_v2</licenseName>
                        <useMissingFile>true</useMissingFile>
                        <excludes>
                            <exclude>**/*.json</exclude>
                        </excludes>
                        <roots>
                            <root>src/main/java</root>
                            <root>src/test</root>
                        </roots>
                        <licenseMerges>
                            <licenseMerge>The Apache Software License, Version 2.0|Apache License, Version 2.0|Apache
                                Public License 2.0|Apache 2|Apache 2.0|Apache License 2.0|Apache License
                            </licenseMerge>
                            <licenseMerge>Eclipse Public License v1.0|Eclipse Public License 1.0|Eclipse Public License
                                - v 1.0
                            </licenseMerge>
                            <licenseMerge>BSD 3-Clause License|BSD|New BSD License</licenseMerge>
                            <licenseMerge>Dual license consisting of the CDDL v1.1 and GPL v2|CDDL+GPL</licenseMerge>
                        </licenseMerges>
                    </configuration>
                </plugin>

                <!-- Code formatting -->
                <plugin>
                    <groupId>com.coveo</groupId>
                    <artifactId>fmt-maven-plugin</artifactId>
                    <version>${fmt.maven.plugin.version}</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>format</goal>
                            </goals>
                            <phase>process-sources</phase>
                        </execution>
                    </executions>
                </plugin>

                <!-- Surefire (unit tests) -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>${maven.surefire.plugin.version}</version>
                </plugin>

                <!-- Failsafe (integration tests) -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <version>${maven.failsafe.plugin.version}</version>
                </plugin>

                <!-- JaCoCo -->
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <version>${jacoco.maven.plugin.version}</version>
                </plugin>

            </plugins>
        </pluginManagement>
    </build>

    <profiles>

        <!-- Release profile -->
        <profile>
            <id>release</id>

            <build>
                <plugins>
                    <!-- Attach sources -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>attach-sources</id>
                                <goals>
                                    <goal>jar-no-fork</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>

                    <!-- Help maven-source-plugin works with kotlin -->
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>build-helper-maven-plugin</artifactId>
                        <version>3.6.0</version>

                        <executions>
                            <execution>
                                <phase>generate-sources</phase>
                                <goals>
                                    <goal>add-source</goal>
                                </goals>
                                <configuration>
                                    <sources>
                                        <source>src/main/kotlin</source>
                                    </sources>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>

                    <!-- Override parent pom's javadoc settings, skip generating javadoc, use kdoc instead -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <configuration>
                            <skip>true</skip>
                        </configuration>
                    </plugin>

                    <plugin>
                        <groupId>org.jetbrains.dokka</groupId>
                        <artifactId>dokka-maven-plugin</artifactId>
                        <version>${dokka.version}</version>
                        <executions>
                            <execution>
                                <!-- generate javadoc.jar before package gpg plugin can generate asc for it -->
                                <phase>prepare-package</phase>
                                <goals>
                                    <goal>dokka</goal>
                                    <goal>javadocJar</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <!-- Set to true to skip a dokka task, default: false -->
                            <skip>false</skip>

                            <!-- Use default or set to a custom path to cache directory to enable package-list caching. -->
                            <!-- When set to default, caches stored in $USER_HOME/.cache/dokka -->
                            <cacheRoot>default</cacheRoot>

                            <!-- Do not output deprecated members, applies globally, can be overridden by packageOptions -->
                            <skipDeprecated>true</skipDeprecated>
                            <!-- Emit warnings about not documented members, applies globally, also can be overridden by packageOptions -->
                            <reportUndocumented>true</reportUndocumented>
                            <!-- Do not create index pages for empty packages -->
                            <skipEmptyPackages>true</skipEmptyPackages>
                            <includeNonPublic>false</includeNonPublic>


                            <!-- Allows to customize documentation generation options on a per-package basis -->
                            <perPackageOptions>
                                <packageOptions>
                                    <!-- Will match kotlin and all sub-packages of it -->
                                    <!-- <prefix>kotlin</prefix>-->

                                    <!-- All options are optional, default values are below: -->
                                    <skipDeprecated>false</skipDeprecated>
                                    <!-- Emit warnings about not documented members  -->
                                    <reportUndocumented>true</reportUndocumented>
                                    <includeNonPublic>false</includeNonPublic>
                                </packageOptions>
                            </perPackageOptions>
                            <sourceDirectories>
                                <dir>${project.basedir}/src/main/kotlin</dir>
                            </sourceDirectories>
                        </configuration>
                    </plugin>

                    <!-- GPG signing -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                        <configuration>
                            <gpgArguments>
                                <arg>--pinentry-mode</arg>
                                <arg>loopback</arg>
                            </gpgArguments>
                        </configuration>
                        <executions>
                            <execution>
                                <id>sign-artifacts</id>
                                <phase>verify</phase>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>

                    <!-- Calculate checksums -->
                    <plugin>
                        <groupId>net.nicoulaj.maven.plugins</groupId>
                        <artifactId>checksum-maven-plugin</artifactId>
                        <version>${checksum.maven.plugin.version}</version>
                        <executions>
                            <execution>
                                <id>source-release-checksum</id>
                                <goals>
                                    <goal>files</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <algorithms>
                                <algorithm>SHA-512</algorithm>
                                <algorithm>SHA-256</algorithm>
                            </algorithms>
                            <csvSummary>false</csvSummary>
                            <fileSets>
                                <fileSet>
                                    <directory>${project.build.directory}</directory>
                                    <includes>
                                        <include>${project.artifactId}-${project.version}-sources.jar</include>
                                        <include>${project.artifactId}-${project.version}-javadoc.jar</include>
                                        <include>${project.artifactId}-${project.version}.jar</include>
                                    </includes>
                                </fileSet>
                            </fileSets>
                            <failIfNoFiles>false</failIfNoFiles>
                        </configuration>
                    </plugin>

                    <plugin>
                        <groupId>org.sonatype.central</groupId>
                        <artifactId>central-publishing-maven-plugin</artifactId>
                        <version>${central.publishing.maven.plugin.version}</version>
                        <extensions>true</extensions>
                        <configuration>
                            <publishingServerId>central</publishingServerId>
                            <autoPublish>true</autoPublish>
                            <!-- Just for validated to avoid waiting for too long time -->
                            <waitUntil>validated</waitUntil>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

    <dependencies>
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-stdlib</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-reflect</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jetbrains.kotlinx</groupId>
            <artifactId>kotlinx-coroutines-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-test-junit5</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <properties>
        <!-- Build -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <project.inceptionYear>2018</project.inceptionYear>

        <!-- Java -->
        <java.version>17</java.version>
        <maven.compiler.target>17</maven.compiler.target>

        <!-- Kotlin -->
        <kotlin.version>2.3.21</kotlin.version>
        <kotlin.coroutine.version>1.10.2</kotlin.coroutine.version>
        <kotlin.compiler.jvmTarget>17</kotlin.compiler.jvmTarget>
        <kotlin.compiler.incremental>true</kotlin.compiler.incremental>

        <!-- Ktor -->
        <ktor.version>2.3.11</ktor.version>

        <!-- Kotlin libraries -->
        <kotlinx.serialization.version>1.8.1</kotlinx.serialization.version>

        <!-- 3rd-party -->
        <jackson.version>2.19.4</jackson.version>
        <lombok.version>1.18.46</lombok.version>
        <logback.version>1.5.32</logback.version>
        <commons.collections4.version>4.5.0</commons.collections4.version>
        <commons.lang3.version>3.20.0</commons.lang3.version>
        <slf4j.version>2.0.13</slf4j.version>
        <javassist.version>3.24.1-GA</javassist.version>
        <websocket.api.version>1.1</websocket.api.version>
        <metrics.core.version>4.2.12</metrics.core.version>

        <!-- Test -->
        <junit.version>4.13.1</junit.version>
        <junit.jupiter.version>5.8.1</junit.jupiter.version>
        <easymock.version>3.4</easymock.version>
        <jsonassert.version>1.5.0</jsonassert.version>
        <mockwebserver.version>2.7.5</mockwebserver.version>

        <!-- Dokka -->
        <dokka.version>2.2.0</dokka.version>

        <!-- Plugin versions -->
        <maven.compiler.plugin.version>3.14.1</maven.compiler.plugin.version>
        <maven.clean.plugin.version>3.2.0</maven.clean.plugin.version>
        <maven.exec.plugin.version>3.5.0</maven.exec.plugin.version>
        <maven.source.plugin.version>3.3.1</maven.source.plugin.version>
        <maven.javadoc.plugin.version>3.6.3</maven.javadoc.plugin.version>
        <maven.deploy.plugin.version>3.1.1</maven.deploy.plugin.version>
        <maven.release.plugin.version>3.0.1</maven.release.plugin.version>
        <maven.gpg.plugin.version>3.1.0</maven.gpg.plugin.version>
        <maven.surefire.plugin.version>3.2.5</maven.surefire.plugin.version>
        <maven.failsafe.plugin.version>3.2.5</maven.failsafe.plugin.version>
        <maven.jar.plugin.version>3.4.1</maven.jar.plugin.version>
        <checksum.maven.plugin.version>1.11</checksum.maven.plugin.version>
        <jacoco.maven.plugin.version>0.8.12</jacoco.maven.plugin.version>
        <license.maven.plugin.version>2.0.0</license.maven.plugin.version>
        <fmt.maven.plugin.version>2.9.1</fmt.maven.plugin.version>
        <versions.maven.plugin.version>2.16.2</versions.maven.plugin.version>
        <central.publishing.maven.plugin.version>0.10.0</central.publishing.maven.plugin.version>
    </properties>

</project>
