<?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/maven-v4_0_0.xsd">

    <!--
        Copyright Red Hat

        Licensed under the Apache License, Version 2.0 (the "License");
        you may not use this file except in compliance with the License.
        You may obtain annotationClass copy of the License at http://www.apache.org/licenses/LICENSE-2.0
        Unless required by applicable law or agreed to in writing, software
        distributed under the License is distributed on an "AS IS" BASIS,
        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        See the License for the specific language governing permissions and
        limitations under the License.
    -->

    <modelVersion>4.0.0</modelVersion>

    <groupId>io.mashona</groupId>
    <artifactId>mashona-logwriting</artifactId>
    <version>1.1.0</version>

    <name>Mashona Log Writing</name>
    <description>Persistent Memory support for Java, binary logging module.</description>
    <url>https://mashona.io/</url>

    <licenses>
        <license>
            <name>Apache License 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.html</url>
            <distribution>repo</distribution>
        </license>
    </licenses>

    <scm>
        <connection>scm:git:git://github.com/jhalliday/mashona.git</connection>
        <developerConnection>scm:git:ssh://git@github.com/jhalliday/mashona.git</developerConnection>
        <url>https://github.com/jhalliday/mashona</url>
    </scm>

    <developers>
        <developer>
            <id>jhalliday</id>
            <name>Jonathan Halliday</name>
            <organization>Red Hat</organization>
        </developer>
    </developers>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>

        <junit.version>5.6.2</junit.version>
        <byteman.version>4.0.17</byteman.version>

        <!-- Requires a jdk14 or later, preferably 17 or later, to build. -->
        <jdk.dir>/usr/local/jdk-17</jdk.dir>
        <maven.compiler.executable>${jdk.dir}/bin/javac</maven.compiler.executable>

        <!-- for running tests, change to point to a directory that is on a pmem DAX mountpoint -->
        <pmem.test.dir>/mnt/pmem/test</pmem.test.dir>
    </properties>

    <distributionManagement>
        <repository>
            <id>jboss-releases-repository</id>
            <name>JBoss Release Repository</name>
            <url>https://repository.jboss.org/nexus/service/local/staging/deploy/maven2/</url>
        </repository>
        <snapshotRepository>
            <id>jboss-snapshots-repository</id>
            <name>JBoss Snapshot Repository</name>
            <url>https://repository.jboss.org/nexus/content/repositories/snapshots/</url>
        </snapshotRepository>
    </distributionManagement>

    <build>

        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.0</version>
                    <executions>

                        <!-- Almost everything uses jdk 14, but some classes are compiled to a 1.8 target so they can be loaded on older JVMs.
                            We could use a multi-version jar instead, but those are better suited where only a few classes are available in newer versions.
                            We have the reverse problem - almost nothing works on old versions. Besides, maven support for packaging multi-version is a mess -->

                        <execution>
                            <id>default-compile</id>
                            <configuration>
                                <fork>true</fork>
                                <excludes>
                                    <exclude>**/PmemUtil.java</exclude>
                                    <exclude>**/ArrayStore.java</exclude>
                                </excludes>
                            </configuration>
                        </execution>

                        <execution>
                            <id>default-testCompile</id>
                            <phase>test-compile</phase>
                            <goals>
                                <goal>testCompile</goal>
                            </goals>
                            <configuration>
                                <fork>true</fork>
                            </configuration>
                        </execution>

                        <execution>
                            <id>legacy-compile</id>
                            <goals>
                                <goal>compile</goal>
                            </goals>
                            <configuration>
                                <includes>
                                    <include>**/PmemUtil.java</include>
                                    <include>**/ArrayStore.java</include>
                                </includes>
                                <source>1.8</source>
                                <target>1.8</target>
                                <fork>true</fork>
                            </configuration>
                        </execution>

                    </executions>
                </plugin>


                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.1.0</version>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.1.0</version>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                </plugin>

            </plugins>
        </pluginManagement>

        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>2.22.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>integration-test</goal>
                            <goal>verify</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <!--  **/Test*.java  **/*Test.java  **/*Tests.java  **/*TestCase.java  -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.1</version>
                <configuration>
                    <useSystemClassLoader>true</useSystemClassLoader>
                    <useManifestOnlyJar>true</useManifestOnlyJar>
                    <forkMode>once</forkMode>
                    <jvm>${jdk.dir}/bin/java</jvm>
                    <parallel>false</parallel>
                    <!-- ensure we don't inherit annotationClass byteman jar form any env settings -->
                    <environmentVariables>
                        <BYTEMAN_HOME></BYTEMAN_HOME>
                        <PMEM_TEST_DIR>${pmem.test.dir}</PMEM_TEST_DIR>
                    </environmentVariables>
                    <systemProperties>
                        <property>
                            <name>org.jboss.byteman.home</name>
                            <value></value>
                        </property>
                    </systemProperties>
                    <!--  -Dorg.jboss.byteman.verbose can be added here for debugging. -->
                    <!-- https://openjdk.java.net/jeps/396 - tests do dodgy things to monitor impl internal state -->
                    <argLine>-Djdk.attach.allowAttachSelf --add-opens=java.base/java.nio=ALL-UNNAMED</argLine>
                </configuration>
            </plugin>

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

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>3.1.1</version>
                <configuration>
                    <javadocExecutable>${jdk.dir}/bin/javadoc</javadocExecutable>
                </configuration>
            </plugin>

        </plugins>
    </build>

    <dependencies>

        <!-- https://github.com/jboss-logging/jboss-logging -->
        <dependency>
            <groupId>org.jboss.logging</groupId>
            <artifactId>jboss-logging</artifactId>
            <version>3.4.1.Final</version>
        </dependency>

        <!-- https://logback.qos.ch/ -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
            <optional>true</optional>
        </dependency>

        <!-- https://junit.org/junit5/ -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>

        <!-- https://byteman.jboss.org/ -->
        <dependency>
            <groupId>org.jboss.byteman</groupId>
            <artifactId>byteman-bmunit5</artifactId>
            <version>${byteman.version}</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.testng</groupId>
                    <artifactId>testng</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun</groupId>
                    <artifactId>tools</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

    </dependencies>
</project>
