<?xml version="1.0" encoding="UTF-8"?>
<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>com.browserstack</groupId>
    <artifactId>browserstack-java-sdk</artifactId>
    <version>1.8.3</version>
    <name>browserstack-java-sdk</name>
    <packaging>jar</packaging>
    <description>Java SDK for Browserstack Selenium Tests</description>
    <url>https://www.browserstack.com</url>

    <developers>
        <developer>
            <name>BrowserStack</name>
            <email>support@browserstack.com</email>
            <organization>BrowserStack</organization>
            <organizationUrl>https://www.browserstack.com</organizationUrl>
        </developer>
    </developers>

    <licenses>
        <license>
            <name>BrowserStack License</name>
            <url>${project.baseUri}LICENSE.txt</url>
        </license>
    </licenses>

    <distributionManagement>
        <snapshotRepository>
            <id>ossrh</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        </snapshotRepository>
        <repository>
            <id>ossrh</id>
            <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
    </distributionManagement>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <testng.version>7.5.1</testng.version>
        <cucumber.version>7.8.1</cucumber.version>
        <gherkin.version>24.0.0</gherkin.version>
        <selenium.version>3.141.59</selenium.version>
        <slf4j.version>1.7.36</slf4j.version>
        <logback.version>1.2.11</logback.version>
        <javassist.version>3.26.0-GA</javassist.version>
        <jsoup.version>1.15.3</jsoup.version>
        <okhttp.version>3.14.9</okhttp.version>
        <browserstack.local.version>1.0.9</browserstack.local.version>
        <commons.lang3.version>3.11</commons.lang3.version>
        <jackson-databind.version>2.14.2</jackson-databind.version>
        <jackson-core.version>2.14.2</jackson-core.version>
        <snakeyml.version>2.0</snakeyml.version>
        <json-simple.version>1.1.1</json-simple.version>
        <maven-site-plugin.version>3.3</maven-site-plugin.version>
        <org.eclipse.jgit.version>5.4.2.201908231537-r</org.eclipse.jgit.version>
        <log4j.version>2.20.0</log4j.version>
        <gson.version>2.9.1</gson.version>
        <project.build.finalName>browserstack-javaagent</project.build.finalName>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>${maven.compiler.source}</maven.compiler.target>
        <maven.compiler.testSource>${maven.compiler.source}</maven.compiler.testSource>
        <maven.compiler.testTarget>${maven.compiler.testSource}</maven.compiler.testTarget>
        <version.proguard-base>7.1.1</version.proguard-base>
        <playwright.version>1.28.0</playwright.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>${javassist.version}</version>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>${testng.version}</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${jackson-core.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson-databind.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>${jackson-databind.version}</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-yaml</artifactId>
            <version>${jackson-databind.version}</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.browserstack</groupId>
            <artifactId>browserstack-local-java</artifactId>
            <version>${browserstack.local.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons.lang3.version}</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>${logback.version}</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.googlecode.json-simple</groupId>
            <artifactId>json-simple</artifactId>
            <version>${json-simple.version}</version>
        </dependency>
        <dependency>
            <groupId>org.yaml</groupId>
            <artifactId>snakeyaml</artifactId>
            <version>${snakeyml.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-artifact</artifactId>
            <version>3.8.6</version>
        </dependency>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>${okhttp.version}</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>${selenium.version}</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-api</artifactId>
            <version>${selenium.version}</version>
        </dependency>
        <dependency>
            <groupId>com.microsoft.playwright</groupId>
            <artifactId>playwright</artifactId>
            <version>${playwright.version}</version>
            <optional>true</optional>
            <exclusions>
                <exclusion>
                    <groupId>com.microsoft.playwright</groupId>
                    <artifactId>driver-bundle</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-core</artifactId>
            <version>${cucumber.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>gherkin</artifactId>
            <version>${gherkin.version}</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>${jsoup.version}</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jgit</groupId>
            <artifactId>org.eclipse.jgit</artifactId>
            <version>${org.eclipse.jgit.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>${gson.version}</version>
        </dependency>
    </dependencies>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>com.github.wvengen</groupId>
                    <artifactId>proguard-maven-plugin</artifactId>
                    <version>2.4.0</version>
                    <configuration>
                        <includeDependency>false</includeDependency>
                        <injar>${project.build.finalName}.${project.packaging}</injar>
                        <outjar>${project.build.finalName}.${project.packaging}</outjar>
                        <libs>
                            <lib>${java.home}/lib/rt.jar</lib>
                            <lib>${java.home}/lib/jce.jar</lib>
                            <lib>${java.home}/lib/ext/sunjce_provider.jar</lib>
                        </libs>
                        <options>
                            <option>-dontskipnonpubliclibraryclassmembers</option>
                            <option>-allowaccessmodification</option>
                            <option>-adaptclassstrings</option>
                            <option>-adaptresourcefilenames **.properties</option>
                            <option>-adaptresourcefilecontents **.properties,META-INF/MANIFEST.MF</option>
                            <option>-verbose</option>
                            <option>-dontnote</option>
                            <option>-dontwarn</option>
                            <option>-keepattributes *Annotation*</option>
                            <option>-keepattributes Signature,InnerClasses,EnclosingMethod</option>
                            <option>-ignorewarnings</option>
                            <option>-keepclasseswithmembers class *</option>
                            <option>-keepclasseswithmembers,allowshrinking public final @interface  * {
                                public private protected static final volatile transient synthetic <![CDATA[<fields>]]>;
                                }
                            </option>
                            <option>-keepclasseswithmembers public class * { public static void main(java.lang.String[]); }</option>
                            <option>-keep public class * extends java.applet.Applet</option>
                            <option>-keep public class * extends javax.servlet.Servlet</option>
                            <option>-keep public class * extends javax.microedition.midlet.MIDlet</option>
                            <option>-keep public class * extends javax.tv.xlet.Xlet</option>
                            <option>-keep public class org.slf4j.** { *; }</option>
                            <option>-keep class org.apache.logging.** { *; }</option>
                            <option>-keep public class ch.qos.logback.** { *; }</option>
                            <option>-keep public class * {
                                public protected <![CDATA[<fields>]]>;
                                public protected <![CDATA[<methods>]]>;
                                }
                            </option>
                            <option>-keepclassmembers enum  * {
                                public static **[] values();
                                public static ** valueOf(java.lang.String);
                                }
                            </option>
                            <option>-keepclassmembers class * extends java.io.Serializable {
                                static final long serialVersionUID;
                                static final java.io.ObjectStreamField[] serialPersistentFields;
                                private void writeObject(java.io.ObjectOutputStream);
                                private void readObject(java.io.ObjectInputStream);
                                java.lang.Object writeReplace();
                                java.lang.Object readResolve();
                                }
                            </option>
                            <option>-keep class * extends java.beans.BeanInfo</option>
                            <option>-keep class * {
                                void set*(***);
                                void set*(int,***);
                                boolean is*();
                                boolean is*(int);
                                *** get*();
                                *** get*(int);
                                }
                            </option>
                            <option>-keep class * extends java.sql.Driver</option>
                            <option>-keep class * extends javax.swing.plaf.ComponentUI {
                                public static javax.swing.plaf.ComponentUI createUI(javax.swing.JComponent);
                                }
                            </option>
                            <option>-keepclasseswithmembers,includedescriptorclasses,allowshrinking class * {
                                native <![CDATA[<methods>]]>;
                                }
                            </option>
                            <option>-keepclassmembers,allowshrinking class * {
                                java.lang.Class class$(java.lang.String);
                                java.lang.Class class$(java.lang.String,boolean);
                                }
                            </option>
                            <option>-keepclassmembers,allowshrinking class * {
                                @proguard.annotation.KeepName
                                <![CDATA[<fields>]]>;
                                @proguard.annotation.KeepName
                                <![CDATA[<methods>]]>;
                                }
                            </option>
                            <option>-keepclassmembers,allowshrinking @proguard.annotation.KeepClassMemberNames class * {
                                <![CDATA[<fields>]]>;
                                <![CDATA[<methods>]]>;
                                }
                            </option>
                            <option>-keepclassmembers,allowshrinking @proguard.annotation.KeepPublicClassMemberNames class * {
                                public <![CDATA[<fields>]]>;
                                public <![CDATA[<methods>]]>;
                                }
                            </option>
                            <option>-keepclassmembers,allowshrinking @proguard.annotation.KeepPublicProtectedClassMemberNames class * {
                                public protected <![CDATA[<fields>]]>;
                                public protected <![CDATA[<methods>]]>;
                                }
                            </option>
                            <option>-keep,allowshrinking @proguard.annotation.KeepName class *</option>
                        </options>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>com.guardsquare</groupId>
                            <artifactId>proguard-base</artifactId>
                            <version>${version.proguard-base}</version>
                            <scope>runtime</scope>
                        </dependency>
                    </dependencies>
                    <executions>
                        <execution>
                            <id>proguard</id>
                            <phase>package</phase>
                            <goals>
                                <goal>proguard</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <compilerArgs>
                        <arg>-XDignore.symbol.file</arg>
                    </compilerArgs>
                    <fork>true</fork>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <appendAssemblyId>false</appendAssemblyId>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                        </manifest>
                        <manifestEntries>
                            <Premain-Class>com.browserstack.BrowserStackJavaAgent</Premain-Class>
                            <Agent-Class>com.browserstack.BrowserStackJavaAgent</Agent-Class>
                            <Can-Redefine-Classes>true</Can-Redefine-Classes>
                            <Can-Retransform-Classes>true</Can-Retransform-Classes>
                        </manifestEntries>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.0</version>
                <executions>
                    <execution>
                        <id>empty-javadoc-jar</id>
                        <phase>package</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                        <configuration>
                            <classifier>javadoc</classifier>
                            <classesDirectory>${basedir}/javadoc</classesDirectory>
                        </configuration>
                    </execution>
                    <execution>
                        <id>empty-sources-jar</id>
                        <phase>package</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                        <configuration>
                            <classifier>sources</classifier>
                            <classesDirectory>${basedir}/sources</classesDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.sonatype.plugins</groupId>
                <artifactId>nexus-staging-maven-plugin</artifactId>
                <version>1.6.7</version>
                <extensions>true</extensions>
                <configuration>
                    <serverId>ossrh</serverId>
                    <nexusUrl>https://oss.sonatype.org/</nexusUrl>
                    <autoReleaseAfterClose>false</autoReleaseAfterClose>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-gpg-plugin</artifactId>
                <version>1.6</version>
                <executions>
                    <execution>
                        <id>sign-artifacts</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>sign</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <profiles>
        <profile>
            <id>java8-</id>
            <activation>
                <jdk>(,1.8]</jdk>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.github.wvengen</groupId>
                        <artifactId>proguard-maven-plugin</artifactId>
                        <configuration>
                            <libs>
                                <lib>${java.home}/lib/rt.jar</lib>
                                <lib>${java.home}/lib/jce.jar</lib>
                                <lib>${java.home}/lib/jsse.jar</lib>
                            </libs>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>java9+</id>
            <activation>
                <jdk>[1.9,)</jdk>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.github.wvengen</groupId>
                        <artifactId>proguard-maven-plugin</artifactId>
                        <configuration>
                            <libs>
                                <lib>${java.home}/jmods/java.base.jmod</lib>
                            </libs>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

    <scm>
        <url>https://github.com/browserstack/browserstack-javaagent</url>
        <connection>scm:git:git@github.com:browserstack/browserstack-javaagent.git</connection>
        <developerConnection>scm:git:git@github.com:browserstack/browserstack-javaagent.git</developerConnection>
    </scm>

</project>
