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

  <artifactId>freelib-parent</artifactId>
  <name>FreeLibrary Parent Project</name>
  <description>A Parent POM for FreeLibrary Projects</description>
  <packaging>pom</packaging>
  <url>https://github.com/ksclarke/freelib-build-tools</url>

  <properties>
    <!-- Do not, by default, overwrite possibly modified local GitHub Actions -->
    <skip.actions.download>true</skip.actions.download>

    <!-- Skip Maven's default site generation stuff -->
    <maven.site.skip>true</maven.site.skip>
    <maven.site.deploy.skip>true</maven.site.deploy.skip>

    <!-- FreeLibrary projects whose versions are managed through this parent -->
    <freelib.resources.version>${project.parent.version}</freelib.resources.version>

    <!-- Dependencies managed through this parent project -->
    <junit.version>4.13.2</junit.version>
    <slf4j.version>2.0.17</slf4j.version>
    <xmlunit.version>2.11.0</xmlunit.version>
    <logback.version>1.5.21</logback.version>

    <!-- Maven plug-in dependencies managed through this parent project -->
    <maven.source.plugin.version>3.4.0</maven.source.plugin.version>
    <maven.filtering.version>3.4.0</maven.filtering.version>
    <maven.javadoc.plugin.version>3.12.0</maven.javadoc.plugin.version>
    <maven.resources.plugin.version>3.4.0</maven.resources.plugin.version>
    <maven.dependency.analyzer.version>1.16.0</maven.dependency.analyzer.version>
    <build.helper.maven.plugin.version>3.6.1</build.helper.maven.plugin.version>
    <properties.maven.plugin.version>1.2.1</properties.maven.plugin.version>
    <freelib.maven.version>0.5.2</freelib.maven.version>

    <!-- We want to override the skip tests directive in our parent project -->
    <maven.test.skip>false</maven.test.skip>

    <!-- Location used for finding the unpacked checkstyle-suppressions.xml file -->
    <!-- It's a built-in configuration for eclipse-cs tool; make it work with Maven -->
    <config_loc>src/main/tools/checkstyle</config_loc>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
      </dependency>
      <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>${logback.version}</version>
      </dependency>
      <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>${logback.version}</version>
      </dependency>

      <!-- Below dependencies are only used for testing -->
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>xmlunit</groupId>
        <artifactId>xmlunit</artifactId>
        <version>${xmlunit.version}</version>
        <scope>test</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>info.freelibrary</groupId>
          <artifactId>freelib-maven-plugins</artifactId>
          <version>${freelib.maven.version}</version>
          <executions>
            <execution>
              <phase>process-resources</phase>
              <goals>
                <goal>generate-codes</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>properties-maven-plugin</artifactId>
          <version>${properties.maven.plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>build-helper-maven-plugin</artifactId>
          <version>${build.helper.maven.plugin.version}</version>
          <configuration>
            <portNames>
              <portName>test.http.port</portName>
              <portName>http.port</portName>
            </portNames>
          </configuration>
          <executions>
            <execution>
              <id>reserve-port</id>
              <phase>initialize</phase>
              <goals>
                <goal>reserve-network-port</goal>
              </goals>
            </execution>
            <execution>
              <phase>generate-sources</phase>
              <goals>
                <goal>add-source</goal>
              </goals>
              <configuration>
                <sources>
                  <source>src/main/generated</source>
                </sources>
              </configuration>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <artifactId>maven-dependency-plugin</artifactId>
          <dependencies>
            <dependency>
              <groupId>org.apache.maven.shared</groupId>
              <artifactId>maven-dependency-analyzer</artifactId>
              <version>${maven.dependency.analyzer.version}</version>
              <exclusions>
                <exclusion>
                  <artifactId>maven-project</artifactId>
                  <groupId>org.apache.maven</groupId>
                </exclusion>
              </exclusions>
            </dependency>
          </dependencies>
          <executions>
            <execution>
              <id>unpack-build-resources</id>
              <phase>generate-resources</phase>
              <goals>
                <goal>unpack</goal>
              </goals>
              <configuration>
                <artifactItems>
                  <artifactItem>
                    <groupId>info.freelibrary</groupId>
                    <artifactId>freelib-resources</artifactId>
                    <version>${freelib.resources.version}</version>
                    <type>jar</type>
                    <includes>eclipse/**/*,checkstyle/**/*,pmd/**/*,github/**/*</includes>
                    <outputDirectory>${basedir}/target/build-resources</outputDirectory>
                  </artifactItem>
                </artifactItems>
              </configuration>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>${maven.resources.plugin.version}</version>
          <configuration>
            <propertiesEncoding>ISO-8859-1</propertiesEncoding>
            <nonFilteredFileExtensions>
              <nonFilteredFileExtension>pdf</nonFilteredFileExtension>
              <nonFilteredFileExtension>tif</nonFilteredFileExtension>
              <nonFilteredFileExtension>jp2</nonFilteredFileExtension>
              <nonFilteredFileExtension>jpx</nonFilteredFileExtension>
              <nonFilteredFileExtension>gif</nonFilteredFileExtension>
              <nonFilteredFileExtension>jpg</nonFilteredFileExtension>
              <nonFilteredFileExtension>png</nonFilteredFileExtension>
              <nonFilteredFileExtension>avi</nonFilteredFileExtension>
              <nonFilteredFileExtension>mp4</nonFilteredFileExtension>
              <nonFilteredFileExtension>mp3</nonFilteredFileExtension>
              <nonFilteredFileExtension>dat</nonFilteredFileExtension>
              <nonFilteredFileExtension>webp</nonFilteredFileExtension>
              <nonFilteredFileExtension>swf</nonFilteredFileExtension>
            </nonFilteredFileExtensions>
          </configuration>
          <dependencies>
            <dependency>
              <groupId>org.apache.maven.shared</groupId>
              <artifactId>maven-filtering</artifactId>
              <version>${maven.filtering.version}</version>
            </dependency>
          </dependencies>
          <executions>
            <execution>
              <id>copy-build-resources</id>
              <phase>process-resources</phase>
              <goals>
                <goal>copy-resources</goal>
              </goals>
              <configuration>
                <outputDirectory>src/main/tools</outputDirectory>
                <overwrite>true</overwrite>
                <resources>
                  <resource>
                    <!-- Checkstyle resources are the only ones filtered -->
                    <directory>${basedir}/target/build-resources</directory>
                    <filtering>true</filtering>
                    <excludes>
                      <exclude>**/pmd/**</exclude>
                      <exclude>**/github/**</exclude>
                      <exclude>**/eclipse/**</exclude>
                    </excludes>
                  </resource>
                  <resource>
                    <directory>${basedir}/target/build-resources</directory>
                    <filtering>false</filtering>
                    <excludes>
                      <exclude>**/github/**</exclude>
                      <exclude>**/checkstyle/**</exclude>
                    </excludes>
                  </resource>
                </resources>
              </configuration>
            </execution>
            <execution>
              <id>copy-github-resources</id>
              <phase>process-resources</phase>
              <goals>
                <goal>copy-resources</goal>
              </goals>
              <configuration>
                <outputDirectory>${basedir}/.github</outputDirectory>
                <skip>${skip.actions.download}</skip>
                <resources>
                  <resource>
                    <directory>${basedir}/target/build-resources/github</directory>
                    <filtering>false</filtering>
                  </resource>
                </resources>
              </configuration>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>${maven.javadoc.plugin.version}</version>
          <dependencies>
            <dependency>
              <groupId>info.freelibrary</groupId>
              <artifactId>freelib-resources</artifactId>
              <version>${freelib.resources.version}</version>
            </dependency>
          </dependencies>
          <configuration>
            <stylesheetfile>javadocs.css</stylesheetfile>
            <nodeprecatedlist>true</nodeprecatedlist>
            <noindex>false</noindex>
            <notree>false</notree>
            <nohelp>true</nohelp>
            <nodeprecated>true</nodeprecated>
            <show>public</show>
            <nosince>true</nosince>
            <notimestamp>true</notimestamp>
            <bottom> </bottom>
            <detectLinks>false</detectLinks>
            <additionalJOptions>
              <additionalJOption>-J-Dhttp.agent=maven-javadoc-plugin-${project.name}</additionalJOption>
            </additionalJOptions>
            <sourcepath>src/main/java:src/main/generated</sourcepath>
            <links>
              <link>${javadocs.jdk.url}</link>
            </links>
          </configuration>
          <executions>
            <execution>
              <id>site-javadocs</id>
              <phase>site</phase>
              <goals>
                <goal>javadoc</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

  <!-- Profiles that should be inherited by child projects -->
  <profiles>
    <!-- Configs only used when building the freelib-build-tools project itself -->
    <profile>
      <id>code-analysis</id>
      <activation>
        <file>
          <exists>../freelib-resources</exists>
        </file>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-enforcer-plugin</artifactId>
          </plugin>
          <plugin>
            <groupId>net.revelc.code.formatter</groupId>
            <artifactId>formatter-maven-plugin</artifactId>
          </plugin>
          <plugin>
            <artifactId>maven-pmd-plugin</artifactId>
            <configuration>
              <rulesets>
                <ruleset>../freelib-resources/src/main/resources/pmd/ruleset.xml</ruleset>
              </rulesets>
            </configuration>
          </plugin>
          <plugin>
            <artifactId>maven-checkstyle-plugin</artifactId>
            <configuration>
              <suppressionsLocation>../freelib-resources/src/main/resources/checkstyle/checkstyle-suppressions.xml</suppressionsLocation>
              <configLocation>../freelib-resources/src/main/resources/checkstyle/checkstyle.xml</configLocation>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- Set the Maven compiler version based on system JDK -->
    <profile>
      <id>java8</id>
      <activation>
        <jdk>1.8</jdk>
      </activation>
      <properties>
        <jacoco.skip>false</jacoco.skip>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <javadocs.jdk.url>https://docs.oracle.com/javase/8/docs/api/</javadocs.jdk.url>
      </properties>
    </profile>
    <profile>
      <id>java9</id>
      <activation>
        <jdk>9</jdk>
      </activation>
      <properties>
        <jacoco.skip>false</jacoco.skip>
        <maven.compiler.release>9</maven.compiler.release>
        <javadocs.jdk.url>https://docs.oracle.com/javase/9/docs/api/</javadocs.jdk.url>
      </properties>
    </profile>
    <profile>
      <id>java10</id>
      <activation>
        <jdk>10</jdk>
      </activation>
      <properties>
        <jacoco.skip>false</jacoco.skip>
        <maven.compiler.release>10</maven.compiler.release>
        <javadocs.jdk.url>https://docs.oracle.com/javase/10/docs/api/</javadocs.jdk.url>
      </properties>
    </profile>
    <profile>
      <id>java11</id>
      <activation>
        <jdk>11</jdk>
      </activation>
      <properties>
        <jacoco.skip>false</jacoco.skip>
        <maven.compiler.release>11</maven.compiler.release>
        <javadocs.jdk.url>https://docs.oracle.com/en/java/javase/11/docs/api/</javadocs.jdk.url>
      </properties>
    </profile>
    <profile>
      <id>java12</id>
      <activation>
        <jdk>12</jdk>
      </activation>
      <properties>
        <jacoco.skip>false</jacoco.skip>
        <maven.compiler.release>12</maven.compiler.release>
        <javadocs.jdk.url>https://docs.oracle.com/en/java/javase/12/docs/api/</javadocs.jdk.url>
      </properties>
    </profile>
    <profile>
      <id>java13</id>
      <activation>
        <jdk>13</jdk>
      </activation>
      <properties>
        <jacoco.skip>false</jacoco.skip>
        <maven.compiler.release>13</maven.compiler.release>
        <javadocs.jdk.url>https://docs.oracle.com/en/java/javase/13/docs/api/</javadocs.jdk.url>
      </properties>
    </profile>
    <profile>
      <id>java14</id>
      <activation>
        <jdk>14</jdk>
      </activation>
      <properties>
        <jacoco.skip>false</jacoco.skip>
        <maven.compiler.release>14</maven.compiler.release>
        <javadocs.jdk.url>https://docs.oracle.com/en/java/javase/14/docs/api/</javadocs.jdk.url>
      </properties>
    </profile>
    <profile>
      <id>java15</id>
      <activation>
        <jdk>15</jdk>
      </activation>
      <properties>
        <jacoco.skip>false</jacoco.skip>
        <maven.compiler.release>15</maven.compiler.release>
        <javadocs.jdk.url>https://docs.oracle.com/en/java/javase/15/docs/api/</javadocs.jdk.url>
      </properties>
    </profile>
    <profile>
      <id>java16</id>
      <activation>
        <jdk>16</jdk>
      </activation>
      <properties>
        <jacoco.skip>false</jacoco.skip>
        <maven.compiler.release>16</maven.compiler.release>
        <javadocs.jdk.url>https://docs.oracle.com/en/java/javase/16/docs/api/</javadocs.jdk.url>
      </properties>
    </profile>
    <profile>
      <id>java17</id>
      <activation>
        <jdk>17</jdk>
      </activation>
      <properties>
        <jacoco.skip>false</jacoco.skip>
        <maven.compiler.release>17</maven.compiler.release>
        <javadocs.jdk.url>https://docs.oracle.com/en/java/javase/17/docs/api/</javadocs.jdk.url>
      </properties>
    </profile>
    <profile>
      <id>java18</id>
      <activation>
        <jdk>18</jdk>
      </activation>
      <properties>
        <jacoco.skip>false</jacoco.skip>
        <maven.compiler.release>18</maven.compiler.release>
        <javadocs.jdk.url>https://docs.oracle.com/en/java/javase/18/docs/api/</javadocs.jdk.url>
      </properties>
    </profile>
    <profile>
      <id>java19</id>
      <activation>
        <jdk>19</jdk>
      </activation>
      <properties>
        <jacoco.skip>false</jacoco.skip>
        <maven.compiler.release>19</maven.compiler.release>
        <javadocs.jdk.url>https://docs.oracle.com/en/java/javase/19/docs/api/</javadocs.jdk.url>
      </properties>
    </profile>
    <profile>
      <id>java20</id>
      <activation>
        <jdk>20</jdk>
      </activation>
      <properties>
        <jacoco.skip>false</jacoco.skip>
        <maven.compiler.release>20</maven.compiler.release>
        <javadocs.jdk.url>https://docs.oracle.com/en/java/javase/20/docs/api/</javadocs.jdk.url>
      </properties>
    </profile>
    <profile>
      <id>java21</id>
      <activation>
        <jdk>21</jdk>
      </activation>
      <properties>
        <jacoco.skip>false</jacoco.skip>
        <maven.compiler.release>21</maven.compiler.release>
        <javadocs.jdk.url>https://docs.oracle.com/en/java/javase/21/docs/api/</javadocs.jdk.url>
      </properties>
    </profile>
    <profile>
      <id>java22</id>
      <activation>
        <jdk>22</jdk>
      </activation>
      <properties>
        <jacoco.skip>false</jacoco.skip>
        <maven.compiler.release>22</maven.compiler.release>
        <javadocs.jdk.url>https://docs.oracle.com/en/java/javase/22/docs/api/</javadocs.jdk.url>
      </properties>
    </profile>
    <profile>
      <id>java23</id>
      <activation>
        <jdk>23</jdk>
      </activation>
      <properties>
        <jacoco.skip>false</jacoco.skip>
        <maven.compiler.release>23</maven.compiler.release>
        <javadocs.jdk.url>https://docs.oracle.com/en/java/javase/23/docs/api/</javadocs.jdk.url>
      </properties>
    </profile>
    <profile>
      <id>java24</id>
      <activation>
        <!-- Switch to using 'property' so GraalVM and standard JDKs are picked up -->
        <property>
          <name>java.version</name>
          <value>24</value>
        </property>
      </activation>
      <properties>
        <jacoco.skip>true</jacoco.skip>
        <maven.compiler.release>24</maven.compiler.release>
        <javadocs.jdk.url>https://docs.oracle.com/en/java/javase/24/docs/api/</javadocs.jdk.url>
      </properties>
    </profile>
    <profile>
      <id>sonar</id>
      <properties>
        <sonar.organization>ksclarke</sonar.organization>
        <sonar.host.url>https://sonarcloud.io</sonar.host.url>
        <sonar.sources>src/main/java</sonar.sources>
        <sonar.tests>src/test/java</sonar.tests>
        <sonar.java.binaries>target/classes</sonar.java.binaries>
        <sonar.java.test.binaries>target/test-classes</sonar.java.test.binaries>
        <sonar.checkstyle.reportPaths>target/checkstyle-result.xml</sonar.checkstyle.reportPaths>
        <sonar.java.pmd.reportPaths>target/pmd.xml</sonar.java.pmd.reportPaths>

        <!-- The version of the sonar-maven-plugin to use -->
        <sonar.maven.version>5.5.0.6356</sonar.maven.version>

        <!-- Limit Sonar suggestions to our minimum JDK version -->
        <sonar.java.source>17</sonar.java.source>
        <sonar.target.source>17</sonar.target.source>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
          </plugin>
          <plugin>
            <groupId>org.sonarsource.scanner.maven</groupId>
            <artifactId>sonar-maven-plugin</artifactId>
            <version>${sonar.maven.version}</version>
            <dependencies>
              <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>${logback.version}</version>
              </dependency>
            </dependencies>
            <executions>
              <execution>
                <goals>
                  <goal>sonar</goal>
                </goals>
                <phase>verify</phase>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- The release-sign-artifacts profile allows for the publishing of project artifact -->
    <profile>
      <id>release</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-source-plugin</artifactId>
            <version>${maven.source.plugin.version}</version>
            <executions>
              <execution>
                <id>attach-sources</id>
                <goals>
                  <goal>jar-no-fork</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>${maven.javadoc.plugin.version}</version>
            <executions>
              <execution>
                <id>attach-javadocs</id>
                <goals>
                  <goal>jar</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

  <!-- Locations to which to publish build artifacts -->
  <distributionManagement>
    <snapshotRepository>
      <id>github</id>
      <url>https://maven.pkg.github.com/freelibrary/jiiify-presentation</url>
    </snapshotRepository>
  </distributionManagement>

  <parent>
    <groupId>info.freelibrary</groupId>
    <artifactId>freelib-build-tools</artifactId>
    <version>13.0.3</version>
  </parent>

</project>
