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

  <!-- Please read https://maven.apache.org/guides/introduction/introduction-to-the-pom.html -->

  <modelVersion>4.0.0</modelVersion>
  <groupId>tdt4100-v2021</groupId>
  <artifactId>banana-editor</artifactId>
  <version>1.0.0</version>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>15</maven.compiler.source>
    <maven.compiler.target>15</maven.compiler.target>
  </properties>
  <dependencies>

    <!-- JavaFX -->
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-controls</artifactId>
      <version>16-ea+7</version>
    </dependency>

    <!-- FXML -->
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-fxml</artifactId>
      <version>16-ea+7</version>
    </dependency>

    <!-- RichTextFX -->
    <dependency>
      <groupId>org.fxmisc.richtext</groupId>
      <artifactId>richtextfx</artifactId>
      <version>0.10.5</version>
    </dependency>

    <!-- Guava Eventbus -->
    <dependency>
      <groupId>org.sonatype.nexus</groupId>
      <artifactId>google-guava-eventbus</artifactId>
      <version>3.2.0-01</version>
    </dependency>

    <!-- JUnit 5 -->
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <version>5.8.0-M1</version>
      <scope>test</scope>
    </dependency>

    <!-- TestFX -->
    <dependency>
      <groupId>org.testfx</groupId>
      <artifactId>testfx-core</artifactId>
      <version>4.0.16-alpha</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.testfx</groupId>
      <artifactId>testfx-junit5</artifactId>
      <version>4.0.16-alpha</version>
      <scope>test</scope>
    </dependency>

    <!-- Hamcrest - Matchers to help testing the JavaFX UI -->
    <dependency>
      <groupId>org.hamcrest</groupId>
      <artifactId>hamcrest</artifactId>
      <version>2.1</version>
      <scope>test</scope>
    </dependency>

    <!-- Monocle - Headless UI testing in CI -->
    <dependency>
      <groupId>org.testfx</groupId>
      <artifactId>openjfx-monocle</artifactId>
      <version>jdk-12.0.1+2</version>
      <scope>test</scope>
    </dependency>

    <!-- Mockito - Mocking Library for performing isolated unit tests -->
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-inline</artifactId>
      <version>3.8.0</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-junit-jupiter</artifactId>
      <version>2.23.0</version>
      <scope>test</scope>
    </dependency>

    <!-- JavaDoc -->
    <dependency>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-javadoc-plugin</artifactId>
      <version>3.2.0</version>
      <type>maven-plugin</type>
    </dependency>

    <!-- JavaFX Graphics - For completeness when packaging uber-jar -->
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-graphics</artifactId>
      <version>17-ea+7</version>
      <classifier>win</classifier>
    </dependency>
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-graphics</artifactId>
      <version>17-ea+7</version>
      <classifier>linux</classifier>
    </dependency>
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-graphics</artifactId>
      <version>17-ea+7</version>
      <classifier>mac</classifier>
    </dependency>

  </dependencies>
  <build>
    <plugins>
      <!-- Plugin for maven to compile the project -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
        <configuration>
          <release>15</release>
          <showWarnings>true</showWarnings>
          <showDeprecation>true</showDeprecation>
          <compilerArgs>
            <arg>--enable-preview</arg>
          </compilerArgs>
        </configuration>
      </plugin>

      <!-- Plugin to test all junit tests with 'surefire:test' -->
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>3.0.0-M5</version>
        <configuration>
          <argLine>@{argLine} --enable-preview</argLine>
          <forkCount>1</forkCount>
          <reuseForks>true</reuseForks>
        </configuration>
      </plugin>

      <!-- Plugin for maven to make it easier to run JavaFX from the command line -->
      <plugin>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-maven-plugin</artifactId>
        <version>0.0.3</version>
        <configuration>
          <mainClass>app.Main</mainClass>
        </configuration>
      </plugin>

      <!-- Plugin to generate code coverage reports -->
      <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.8.6</version>
        <executions>
          <execution>
            <id>default-prepare-agent</id>
            <goals>
              <goal>prepare-agent</goal>
            </goals>
          </execution>
          <execution>
            <id>default-report</id>
            <phase>prepare-package</phase>
            <goals>
              <goal>report</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <!-- Plugin to bundle dependencies to generate a jar file -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>app.MainLauncher</mainClass>
                </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>

    </plugins>
  </build>
</project>
