<?xml version="1.0" ?>
<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>
        <groupId>com.atlassian.pom</groupId>
        <artifactId>public-pom</artifactId>
        <version>6.0.1</version>
    </parent>

    <groupId>com.atlassian.refapp</groupId>
    <artifactId>atlassian-refapp-parent</artifactId>
    <version>5.2.3</version>
    <packaging>pom</packaging>

    <name>Atlassian Reference Application (parent pom)</name>

    <modules>
        <module>refapp-plugins</module>
        <module>refapp-test-plugin</module>
        <module>refapp-bundled-plugins</module>
        <module>atlassian-refapp-pageobjects</module>
        <module>refapp-api</module>
        <module>refapp-core</module>
        <module>refapp-webapp</module>
        <module>platform-projects</module>
    </modules>

    <scm>
        <connection>scm:git:git@bitbucket.org:atlassian/atlassian-refapp.git</connection>
        <developerConnection>scm:git:git@bitbucket.org:atlassian/atlassian-refapp.git</developerConnection>
        <url>https://bitbucket.org/atlassian/atlassian-refapp</url>
        <tag>atlassian-refapp-parent-5.2.3</tag>
    </scm>
    <issueManagement>
        <system>Jira</system>
        <url>https://ecosystem.atlassian.net/browse/REFAPP</url>
    </issueManagement>
    <ciManagement>
        <system>Bamboo</system>
        <url>https://ecosystem-bamboo.internal.atlassian.com/browse/REFAPP</url>
    </ciManagement>

    <properties>
        <platform.version>5.0.27</platform.version>
        <!-- update this whenever you update platform.versions -->
        <felix.platform.version>5.6.12</felix.platform.version>
        <ctk-plugin.version>5.0.0@platform_5.0.0</ctk-plugin.version>

        <amps.version>8.0.4</amps.version>
        <tomcat.version>tomcat85x</tomcat.version>

        <node.version>12.8.1</node.version>
        <yarn.version>1.21.1</yarn.version>
        <yarn.cmd.install>install --frozen-lockfile --prefer-offline --mutex network --no-progress</yarn.cmd.install>
        <!-- build mode is production by default. It can be overridden with the NODE_ENV environment var. -->
        <frontend.build.mode>production</frontend.build.mode>
        <frontend.maven.plugin.version>1.9.1</frontend.maven.plugin.version>

        <aui.version>9.2.0</aui.version>
        <atlassian.clientside.extensions.version>1.0.0-rc-1</atlassian.clientside.extensions.version>
        <atlassian.jslibs.version>1.5.0</atlassian.jslibs.version>
        <atlassian.instrumentation.version>3.0.0</atlassian.instrumentation.version>
        <atlassian.marshalling.jdk.version>1.1.0</atlassian.marshalling.jdk.version>
        <atlassian.navlinks.version>5.0.0</atlassian.navlinks.version>
        <atlassian.pageobjects.version>3.0.0</atlassian.pageobjects.version>
        <atlassian.spring.scanner.version>2.1.10</atlassian.spring.scanner.version>
        <less.version>4.0.0</less.version>
        <rest.version>6.1.2</rest.version>
        <upm.version>4.0.18</upm.version>

        <h2.version>1.4.200</h2.version>
        <vibur.version>9.0</vibur.version>
        <plugins-viewer.version>2.0.1</plugins-viewer.version>
        <dark-features-rest-plugin.version>0.9.4</dark-features-rest-plugin.version>

        <!-- libraries need to a .libversion suffix -->
        <fp.libversion>1.0.1</fp.libversion>
        <jaxb.libversion>2.3.1</jaxb.libversion>
        <rome.libversion>1.0</rome.libversion>
        <jetty.libversion>9.2.15.v20160210</jetty.libversion>

        <plugins.instrumentation.enabled>false</plugins.instrumentation.enabled>

        <jdbc.postgres.version>42.2.5</jdbc.postgres.version>
        <jdbc.mysql.version>5.1.44</jdbc.mysql.version>
        <jdbc.oracle.version>12.2.0.1-atlassian-hosted</jdbc.oracle.version>
        <jdbc.sqljdbc.version>6.0.7507</jdbc.sqljdbc.version>

        <!--
            We don't do any jdbc database provisioning by default, as we use an embedded H2 database.
            See com.atlassian.refapp.api.ConnectionProvider
            Additional properties are there just to keep the IDE and the maven-sql-plugin from parse failures.
            Note that these JDBC parameters apply only to running via AMPS; running via cargo does not use these, see REFAPPDEV-37.
        -->
        <jdbc.skip.provisioning>true</jdbc.skip.provisioning>
        <jdbc.driver.class.name>not.enabled</jdbc.driver.class.name>
        <jdbc.admin.url>not.enabled</jdbc.admin.url>
        <jdbc.admin.user>not.enabled</jdbc.admin.user>
        <jdbc.admin.pass>not.enabled</jdbc.admin.pass>
        <jdbc.app.url>not.enabled</jdbc.app.url>
        <jdbc.app.user>not.enabled</jdbc.app.user>
        <jdbc.app.pass>not.enabled</jdbc.app.pass>

        <!-- default provisioning properties -->
        <jdbc.provisioning.autocommit>false</jdbc.provisioning.autocommit>
        <jdbc.provisioning.onerror.drop>abort</jdbc.provisioning.onerror.drop>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.atlassian.platform</groupId>
                <artifactId>platform</artifactId>
                <version>${platform.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.atlassian.platform</groupId>
                <artifactId>third-party</artifactId>
                <version>${platform.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.atlassian.plugins.rest</groupId>
                <artifactId>com.atlassian.jersey-library</artifactId>
                <version>${rest.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>com.atlassian.refapp</groupId>
                <artifactId>refapp-api</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.atlassian.refapp</groupId>
                <artifactId>atlassian-refapp-auth-plugin</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.atlassian.refapp</groupId>
                <artifactId>atlassian-refapp-sal-plugin</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.atlassian.refapp</groupId>
                <artifactId>atlassian-refapp-core</artifactId>
                <version>${project.version}</version>
            </dependency>

            <dependency>
                <groupId>com.atlassian</groupId>
                <artifactId>plugins-viewer-plugin</artifactId>
                <version>${plugins-viewer.version}</version>
            </dependency>
            <dependency>
                <groupId>com.atlassian.extras</groupId>
                <artifactId>atlassian-extras</artifactId>
                <version>3.2</version>
                <exclusions>
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>com.atlassian.functest</groupId>
                <artifactId>functest-plugin</artifactId>
                <version>${fp.libversion}</version>
            </dependency>
            <dependency>
                <groupId>com.atlassian.instrumentation</groupId>
                <artifactId>atlassian-instrumentation-core</artifactId>
                <version>${atlassian.instrumentation.version}</version>
            </dependency>
            <dependency>
                <groupId>com.atlassian.instrumentation</groupId>
                <artifactId>atlassian-instrumentation-expose-rest</artifactId>
                <version>${atlassian.instrumentation.version}</version>
            </dependency>
            <dependency>
                <groupId>com.atlassian.instrumentation</groupId>
                <artifactId>atlassian-instrumentation-expose-jmx</artifactId>
                <version>${atlassian.instrumentation.version}</version>
            </dependency>
            <dependency>
                <groupId>com.atlassian.marshalling</groupId>
                <artifactId>atlassian-marshalling-jdk</artifactId>
                <version>${atlassian.marshalling.jdk.version}</version>
            </dependency>
            <dependency>
                <groupId>com.atlassian.platform</groupId>
                <artifactId>ctk-plugin</artifactId>
                <version>${ctk-plugin.version}</version>
            </dependency>
            <dependency>
                <groupId>com.atlassian.plugins</groupId>
                <artifactId>atlassian-plugins-osgi-javaconfig</artifactId>
                <version>0.3.0</version>
            </dependency>
            <dependency>
                <groupId>com.atlassian.plugins</groupId>
                <artifactId>atlassian-dark-features-rest-plugin</artifactId>
                <version>${dark-features-rest-plugin.version}</version>
            </dependency>
            <dependency>
                <groupId>com.atlassian.plugins</groupId>
                <artifactId>atlassian-dark-features-test-utils</artifactId>
                <version>${dark-features-rest-plugin.version}</version>
            </dependency>
            <dependency>
                <groupId>com.atlassian.plugins</groupId>
                <artifactId>atlassian-nav-links-plugin</artifactId>
                <version>${atlassian.navlinks.version}</version>
            </dependency>
            <dependency>
                <groupId>com.atlassian.plugins</groupId>
                <artifactId>atlassian-nav-links-spi</artifactId>
                <version>${atlassian.navlinks.version}</version>
            </dependency>
            <dependency>
                <groupId>com.atlassian.selenium</groupId>
                <artifactId>atlassian-pageobjects-elements</artifactId>
                <version>${atlassian.pageobjects.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.atlassian.bundles</groupId>
                        <artifactId>jsr305</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>com.atlassian.seraph</groupId>
                <artifactId>atlassian-seraph</artifactId>
                <version>2.1.7-rc3</version>
                <exclusions>
                    <exclusion>
                        <groupId>*</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>com.atlassian.user</groupId>
                <artifactId>atlassian-user</artifactId>
                <version>2.0</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>osuser</groupId>
                        <artifactId>osuser</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>opensymphony</groupId>
                        <artifactId>propertyset</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>javax.transaction</groupId>
                        <artifactId>jta</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>xml-apis</groupId>
                        <artifactId>xml-apis</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>p6spy</groupId>
                        <artifactId>p6spy</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>dom4j</groupId>
                        <artifactId>dom4j</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>commons-collections</groupId>
                        <artifactId>commons-collections</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>javax.servlet</groupId>
                        <artifactId>servlet-api</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>com.atlassian.upm</groupId>
                <artifactId>atlassian-universal-plugin-manager-plugin</artifactId>
                <version>${upm.version}</version>
            </dependency>

            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.6</version>
            </dependency>
            <dependency>
                <groupId>commons-beanutils</groupId>
                <artifactId>commons-beanutils</artifactId>
                <version>1.9.4</version>
            </dependency>
            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>1.13</version>
            </dependency>
            <!-- TODO: Remove commons-lang 2 once everything works without it -->
            <dependency>
                <groupId>commons-lang</groupId>
                <artifactId>commons-lang</artifactId>
                <version>2.6</version>
                <scope>test</scope>
                <!-- Forced to test scope to ensure runtime code doesn't use it -->
            </dependency>
            <dependency>
                <groupId>commons-pool</groupId>
                <artifactId>commons-pool</artifactId>
                <version>1.6</version>
            </dependency>
            <dependency>
                <groupId>com.h2database</groupId>
                <artifactId>h2</artifactId>
                <version>${h2.version}</version>
            </dependency>
            <dependency>
                <groupId>javax.inject</groupId>
                <artifactId>javax.inject</artifactId>
                <version>1</version>
            </dependency>
            <dependency>
                <groupId>javax.xml.bind</groupId>
                <artifactId>jaxb-api</artifactId>
                <version>${jaxb.libversion}</version>
            </dependency>
            <dependency>
                <groupId>joda-time</groupId>
                <artifactId>joda-time</artifactId>
                <version>2.6</version>
            </dependency>
            <dependency>
                <groupId>org.apache.felix</groupId>
                <artifactId>org.apache.felix.framework</artifactId>
                <version>${felix.platform.version}</version>
            </dependency>
            <dependency>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-util</artifactId>
                <version>${jetty.libversion}</version>
            </dependency>
            <dependency>
                <!-- Needs to be the same version as that used by c.a.velocity.htmlsafe:velocity-htmlsafe -->
                <groupId>org.apache.velocity</groupId>
                <artifactId>velocity</artifactId>
                <version>1.6.4-atlassian-18</version>
            </dependency>
            <dependency>
                <groupId>org.apache.velocity</groupId>
                <artifactId>velocity-tools</artifactId>
                <version>1.3</version>
                <exclusions>
                    <exclusion>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>commons-collections</groupId>
                        <artifactId>commons-collections</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>struts</groupId>
                        <artifactId>struts</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>velocity</groupId>
                        <artifactId>velocity</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>javax.servlet</groupId>
                        <artifactId>servlet-api</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jaxb</groupId>
                <artifactId>jaxb-runtime</artifactId>
                <version>${jaxb.libversion}</version>
            </dependency>
            <dependency>
                <groupId>org.vibur</groupId>
                <artifactId>vibur-dbcp</artifactId>
                <version>${vibur.version}</version>
            </dependency>
            <dependency>
                <groupId>xalan</groupId>
                <artifactId>xalan</artifactId>
                <version>2.7.2</version>
            </dependency>

            <!-- Required for client-side extensions APIs to work -->
            <dependency>
                <groupId>com.atlassian.plugins</groupId>
                <artifactId>atlassian-clientside-extensions-runtime</artifactId>
                <version>${atlassian.clientside.extensions.version}</version>
            </dependency>

            <dependency>
                <groupId>com.nimbusds</groupId>
                <artifactId>nimbus-jose-jwt</artifactId>
                <version>7.8.1</version>
            </dependency>
            <dependency>
                <groupId>com.ibm.icu</groupId>
                <artifactId>icu4j</artifactId>
                <version>68.2</version>
            </dependency>
            <dependency>
                <groupId>commons-collections</groupId>
                <artifactId>commons-collections</artifactId>
                <version>3.2.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-compress</artifactId>
                <version>1.20</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>com.atlassian.maven.plugins</groupId>
                    <artifactId>smartass-maven-plugin</artifactId>
                    <version>2.1.3</version>
                </plugin>
                <plugin>
                    <groupId>com.atlassian.maven.plugins</groupId>
                    <artifactId>amps-maven-plugin</artifactId>
                    <version>${amps.version}</version>
                    <configuration>
                        <extractDependencies>false</extractDependencies>
                    </configuration>
                    <extensions>true</extensions>
                </plugin>
                <plugin>
                    <groupId>com.atlassian.plugin</groupId>
                    <artifactId>atlassian-spring-scanner-maven-plugin</artifactId>
                    <version>${atlassian.spring.scanner.version}</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>atlassian-spring-scanner</goal>
                            </goals>
                            <phase>process-classes</phase>
                        </execution>
                    </executions>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-enforcer-plugin</artifactId>
                </plugin>

                <!--
                This sql needs to be run BEFORE amps gets run in the atlassian-refapp (refapp-webapp) module.
                Unfortunately, the only place this works is in pre-integration-test phase and so does amps.
                The order they are executed depends on the order they appear in the effective pom. If you have
                a problem with this check your effective pom using 'mvn help:effective-pom > effective-pom.xml'
                inside refapp-webapp and check that the plugins are correctly ordered.
                -->
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>sql-maven-plugin</artifactId>
                    <version>1.5</version>
                    <configuration>
                        <skip>${jdbc.skip.provisioning}</skip>
                        <driver>${jdbc.driver.class.name}</driver>
                        <url>${jdbc.admin.url}</url>
                        <username>${jdbc.admin.user}</username>
                        <password>${jdbc.admin.pass}</password>
                        <autocommit>${jdbc.provisioning.autocommit}</autocommit>
                    </configuration>
                    <executions>
                        <!-- first invocation - drop the existing database if it's there, optionally ignoring errors -->
                        <execution>
                            <id>drop-db-before-test</id>
                            <phase>pre-integration-test</phase>
                            <goals>
                                <goal>execute</goal>
                            </goals>
                            <configuration>
                                <onError>${jdbc.provisioning.onerror.drop}</onError>
                                <sqlCommand>${jdbc.provisioning.script.drop}</sqlCommand>
                            </configuration>
                        </execution>
                        <!-- second invocation - create the database -->
                        <execution>
                            <id>create-db-before-test</id>
                            <phase>pre-integration-test</phase>
                            <goals>
                                <goal>execute</goal>
                            </goals>
                            <configuration>
                                <sqlCommand>${jdbc.provisioning.script.create.db}</sqlCommand>
                            </configuration>
                        </execution>
                    </executions>
                    <dependencies>
                        <dependency>
                            <groupId>org.postgresql</groupId>
                            <artifactId>postgresql</artifactId>
                            <version>${jdbc.postgres.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>mysql</groupId>
                            <artifactId>mysql-connector-java</artifactId>
                            <version>${jdbc.mysql.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>com.oracle.jdbc</groupId>
                            <artifactId>ojdbc8</artifactId>
                            <version>${jdbc.oracle.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>com.microsoft.sqlserver</groupId>
                            <artifactId>sqljdbc</artifactId>
                            <version>${jdbc.sqljdbc.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>

                <plugin>
                    <groupId>com.github.eirslett</groupId>
                    <artifactId>frontend-maven-plugin</artifactId>
                    <version>${frontend.maven.plugin.version}</version>
                    <configuration>
                        <nodeVersion>v${node.version}</nodeVersion>
                        <yarnVersion>v${yarn.version}</yarnVersion>
                        <workingDirectory>${project.basedir}</workingDirectory>
                        <installDirectory>${project.build.outputDirectory}</installDirectory>
                        <npmInheritsProxyConfigFromMaven>true</npmInheritsProxyConfigFromMaven>
                        <environmentVariables>
                            <NODE_ENV>${frontend.build.mode}</NODE_ENV>
                        </environmentVariables>
                    </configuration>
                    <executions>
                        <execution>
                            <id>step-1-set-up-environment</id>
                            <goals>
                                <goal>install-node-and-yarn</goal>
                            </goals>
                            <configuration>
                                <workingDirectory>${project.basedir}</workingDirectory>
                            </configuration>
                            <phase>initialize</phase>
                        </execution>
                        <execution>
                            <id>step-2-install-frontend-dependencies</id>
                            <goals>
                                <goal>yarn</goal>
                            </goals>
                            <configuration>
                                <workingDirectory>${project.basedir}</workingDirectory>
                                <arguments>${yarn.cmd.install}</arguments>
                                <environmentVariables>
                                    <!-- Must always be development so that we get our dev dependencies -->
                                    <NODE_ENV>development</NODE_ENV>
                                </environmentVariables>
                            </configuration>
                            <phase>initialize</phase>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>com.atlassian.maven.plugins</groupId>
                <artifactId>amps-maven-plugin</artifactId>
                <version>${amps.version}</version>
                <extensions>true</extensions>
                <configuration>
                    <log4jProperties>src/main/resources/log4j.properties</log4jProperties>
                    <containerId>${tomcat.version}</containerId>
                    <products>
                        <product>
                            <id>refapp</id>
                            <output>${project.build.directory}/refapp.log</output>
                            <jvmArgs>-Dbaseurl=http://localhost:5990/refapp -Dcom.atlassian.plugin.instrumentation.PluginSystemInstrumentation.enabled=${plugins.instrumentation.enabled}</jvmArgs>
                            <version>${project.version}</version>
                        </product>
                    </products>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <executions>
                    <execution>
                        <!-- Disable the "hammer" rule -->
                        <id>ban-milestones-and-release-candidates</id>
                        <phase>none</phase>
                    </execution>
                    <execution>
                        <!-- Disable the build environment rules (allows using AMPS snapshots) -->
                        <id>enforce-build-environment</id>
                        <phase>none</phase>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>debug</id>
            <build>
                <defaultGoal>verify</defaultGoal>
            </build>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>ide</id>
            <dependencies>
                <dependency>
                    <groupId>com.atlassian.plugins</groupId>
                    <artifactId>atlassian-plugins-osgi-bridge</artifactId>
                </dependency>
            </dependencies>
        </profile>

        <profile>
            <id>build-mode-is-set-by-node-env</id>
            <activation>
                <property>
                    <name>env.NODE_ENV</name>
                </property>
            </activation>
            <properties>
                <frontend.build.mode>${env.NODE_ENV}</frontend.build.mode>
            </properties>
        </profile>

        <profile>
            <id>postgres</id>
            <properties>
                <jdbc.skip.provisioning>false</jdbc.skip.provisioning>
                <jdbc.driver.class.name>org.postgresql.Driver</jdbc.driver.class.name>
                <jdbc.host>localhost</jdbc.host>
                <jdbc.port>5432</jdbc.port>
                <jdbc.admin.url>jdbc:postgresql://${jdbc.host}:${jdbc.port}/postgres</jdbc.admin.url>
                <jdbc.app.url>jdbc:postgresql://${jdbc.host}:${jdbc.port}/${jdbc.app.db}</jdbc.app.url>
                <jdbc.admin.user>postgres</jdbc.admin.user>
                <jdbc.admin.pass>postgres</jdbc.admin.pass>
                <jdbc.app.db>refappdb</jdbc.app.db>
                <jdbc.app.schema>refappschema</jdbc.app.schema>
                <jdbc.app.user>refappuser</jdbc.app.user>
                <jdbc.app.pass>refapppass</jdbc.app.pass>
                <jdbc.provisioning.autocommit>true</jdbc.provisioning.autocommit>
                <jdbc.provisioning.script.drop>
                    drop database if exists ${jdbc.app.db};
                    drop user if exists ${jdbc.app.user};
                </jdbc.provisioning.script.drop>
                <jdbc.provisioning.script.create.db>
                    create user ${jdbc.app.user} with password '${jdbc.app.pass}';
                    create database ${jdbc.app.db} with owner ${jdbc.app.user};
                </jdbc.provisioning.script.create.db>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.atlassian.maven.plugins</groupId>
                        <artifactId>amps-maven-plugin</artifactId>
                        <configuration>
                            <systemProperties>
                                <refapp.jdbc.external>true</refapp.jdbc.external>
                                <refapp.jdbc.driver.class.name>${jdbc.driver.class.name}</refapp.jdbc.driver.class.name>
                                <refapp.jdbc.app.url>${jdbc.app.url}</refapp.jdbc.app.url>
                                <refapp.jdbc.app.schema>${jdbc.app.schema}</refapp.jdbc.app.schema>
                                <refapp.jdbc.app.user>${jdbc.app.user}</refapp.jdbc.app.user>
                                <refapp.jdbc.app.pass>${jdbc.app.pass}</refapp.jdbc.app.pass>
                            </systemProperties>
                            <libArtifacts>
                                <libArtifact>
                                    <groupId>org.postgresql</groupId>
                                    <artifactId>postgresql</artifactId>
                                    <version>${jdbc.postgres.version}</version>
                                </libArtifact>
                            </libArtifacts>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>mysql</id>
            <properties>
                <jdbc.skip.provisioning>false</jdbc.skip.provisioning>
                <jdbc.driver.class.name>com.mysql.jdbc.Driver</jdbc.driver.class.name>
                <jdbc.host>localhost</jdbc.host>
                <jdbc.port>3306</jdbc.port>
                <jdbc.admin.url>jdbc:mysql://${jdbc.host}:${jdbc.port}/mysql</jdbc.admin.url>
                <jdbc.app.url>jdbc:mysql://${jdbc.host}:${jdbc.port}/${jdbc.app.db}</jdbc.app.url>
                <jdbc.admin.user>root</jdbc.admin.user>
                <jdbc.admin.pass>root</jdbc.admin.pass>
                <jdbc.app.db>refappdb</jdbc.app.db>
                <jdbc.app.user>refappuser</jdbc.app.user>
                <jdbc.app.pass>refapppass</jdbc.app.pass>
                <!--
                    mysql has no nice means of detecting whether a user exists prior to dropping (until 5.7, when 'if
                    exists' was introduced), so we allow failures; detecting database existence prior to drop has
                    existed since 5.1, so we use it
                  -->
                <jdbc.provisioning.onerror.drop>continue</jdbc.provisioning.onerror.drop>
                <jdbc.provisioning.script.drop>
                    drop database if exists ${jdbc.app.db};
                    drop user '${jdbc.app.user}'@'localhost';
                </jdbc.provisioning.script.drop>
                <jdbc.provisioning.script.create.db>
                    create database ${jdbc.app.db};
                    grant all on ${jdbc.app.db}.* to '${jdbc.app.user}'@'localhost' identified by '${jdbc.app.pass}';
                    flush privileges;
                </jdbc.provisioning.script.create.db>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.atlassian.maven.plugins</groupId>
                        <artifactId>amps-maven-plugin</artifactId>
                        <configuration>
                            <systemProperties>
                                <refapp.jdbc.external>true</refapp.jdbc.external>
                                <refapp.jdbc.driver.class.name>${jdbc.driver.class.name}</refapp.jdbc.driver.class.name>
                                <refapp.jdbc.app.url>${jdbc.app.url}</refapp.jdbc.app.url>
                                <refapp.jdbc.app.user>${jdbc.app.user}</refapp.jdbc.app.user>
                                <refapp.jdbc.app.pass>${jdbc.app.pass}</refapp.jdbc.app.pass>
                            </systemProperties>
                            <libArtifacts>
                                <libArtifact>
                                    <groupId>mysql</groupId>
                                    <artifactId>mysql-connector-java</artifactId>
                                    <version>${jdbc.mysql.version}</version>
                                </libArtifact>
                            </libArtifacts>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>oracle</id>
            <properties>
                <jdbc.skip.provisioning>false</jdbc.skip.provisioning>
                <jdbc.driver.class.name>oracle.jdbc.OracleDriver</jdbc.driver.class.name>
                <jdbc.host>localhost</jdbc.host>
                <jdbc.port>1521</jdbc.port>
                <jdbc.sid>XE</jdbc.sid>
                <jdbc.admin.url>jdbc:oracle:thin:@${jdbc.host}:${jdbc.port}:${jdbc.sid}</jdbc.admin.url>
                <jdbc.app.url>${jdbc.admin.url}</jdbc.app.url>
                <jdbc.admin.user>oracle</jdbc.admin.user>
                <jdbc.admin.pass>oracle</jdbc.admin.pass>
                <jdbc.app.db>refappdb</jdbc.app.db>
                <jdbc.app.schema>refappuser</jdbc.app.schema>
                <jdbc.app.user>refappuser</jdbc.app.user>
                <jdbc.app.pass>refapppass</jdbc.app.pass>
                <!-- oracle has no nice means of detecting whether a user exists prior to dropping, so we allow failures -->
                <jdbc.provisioning.onerror.drop>continue</jdbc.provisioning.onerror.drop>
                <jdbc.provisioning.script.drop>
                    drop user ${jdbc.app.user} cascade;
                </jdbc.provisioning.script.drop>
                <jdbc.provisioning.script.create.db>
                    create user ${jdbc.app.user} identified by ${jdbc.app.pass} default tablespace users quota unlimited on users;
                    grant connect, resource to ${jdbc.app.user};
                </jdbc.provisioning.script.create.db>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.atlassian.maven.plugins</groupId>
                        <artifactId>amps-maven-plugin</artifactId>
                        <configuration>
                            <systemProperties>
                                <refapp.jdbc.external>true</refapp.jdbc.external>
                                <refapp.jdbc.driver.class.name>${jdbc.driver.class.name}</refapp.jdbc.driver.class.name>
                                <refapp.jdbc.app.url>${jdbc.app.url}</refapp.jdbc.app.url>
                                <refapp.jdbc.app.schema>${jdbc.app.schema}</refapp.jdbc.app.schema>
                                <refapp.jdbc.app.user>${jdbc.app.user}</refapp.jdbc.app.user>
                                <refapp.jdbc.app.pass>${jdbc.app.pass}</refapp.jdbc.app.pass>
                            </systemProperties>
                            <libArtifacts>
                                <libArtifact>
                                    <groupId>com.oracle.jdbc</groupId>
                                    <artifactId>ojdbc8</artifactId>
                                    <version>${jdbc.oracle.version}</version>
                                </libArtifact>
                            </libArtifacts>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>mssql-sqljdbc</id>
            <properties>
                <jdbc.skip.provisioning>false</jdbc.skip.provisioning>
                <jdbc.driver.class.name>com.microsoft.sqlserver.jdbc.SQLServerDriver</jdbc.driver.class.name>
                <jdbc.host>localhost</jdbc.host>
                <jdbc.port>1433</jdbc.port>
                <jdbc.admin.url>jdbc:sqlserver://${jdbc.host}:${jdbc.port};databaseName=master</jdbc.admin.url>
                <jdbc.app.url>jdbc:sqlserver://${jdbc.host}:${jdbc.port};databaseName=${jdbc.app.db}</jdbc.app.url>
                <jdbc.admin.user>sa</jdbc.admin.user>
                <jdbc.admin.pass>@!1234abc</jdbc.admin.pass>
                <jdbc.app.db>refappdb</jdbc.app.db>
                <jdbc.app.schema>refappschema</jdbc.app.schema>
                <jdbc.app.user>refappuser</jdbc.app.user>
                <jdbc.app.pass>@!1234abc</jdbc.app.pass>
                <jdbc.provisioning.autocommit>true</jdbc.provisioning.autocommit>
                <jdbc.provisioning.script.drop>
                    if exists(select 1 from master.sys.databases where name='${jdbc.app.db}') drop database ${jdbc.app.db};
                    if exists(select 1 from master.sys.database_principals where name='${jdbc.app.user}') drop user ${jdbc.app.user};
                    if exists(select 1 from master.sys.sql_logins where name='${jdbc.app.user}') drop login ${jdbc.app.user};
                </jdbc.provisioning.script.drop>
                <jdbc.provisioning.script.create.db>
                    create login ${jdbc.app.user} with password = '${jdbc.app.pass}';
                    create user ${jdbc.app.user} for login ${jdbc.app.user};
                    create database ${jdbc.app.db};
                    alter authorization on database::${jdbc.app.db} to ${jdbc.app.user};
                </jdbc.provisioning.script.create.db>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.atlassian.maven.plugins</groupId>
                        <artifactId>amps-maven-plugin</artifactId>
                        <configuration>
                            <systemProperties>
                                <refapp.jdbc.external>true</refapp.jdbc.external>
                                <refapp.jdbc.driver.class.name>${jdbc.driver.class.name}</refapp.jdbc.driver.class.name>
                                <refapp.jdbc.app.url>${jdbc.app.url}</refapp.jdbc.app.url>
                                <refapp.jdbc.app.schema>${jdbc.app.schema}</refapp.jdbc.app.schema>
                                <refapp.jdbc.app.user>${jdbc.app.user}</refapp.jdbc.app.user>
                                <refapp.jdbc.app.pass>${jdbc.app.pass}</refapp.jdbc.app.pass>
                            </systemProperties>
                            <libArtifacts>
                                <libArtifact>
                                    <groupId>com.microsoft.sqlserver</groupId>
                                    <artifactId>sqljdbc</artifactId>
                                    <version>${jdbc.sqljdbc.version}</version>
                                </libArtifact>
                            </libArtifacts>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>
