<?xml version="1.0" encoding="UTF-8"?>
<!--
 * See the NOTICE file distributed with this work for additional
 * information regarding copyright ownership.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-->
<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">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.xwiki.commons</groupId>
    <artifactId>xwiki-commons-pom</artifactId>
    <version>8.4.2</version>
    <!-- Note: Do NOT set the <relativePath> tag here as this can cause issues. For example imagine you're using
         Jenkins and you have the following directory structure:
             workspace/xwiki-commons
             workspace/xwiki-platform_Quality_Checks
         When the "xwiki-platform_Quality_Checks" module is built you definitely don't want its pom.xml to point to
         workspace/xwiki-commons since that job may not have been built for some time (and thus it might not be up to
         date with the latest code from the SCM, thus causing build failures that are hard to track.

         By using an empty value we force Maven to resolve the parent from the Maven repositories,
         see http://maven.apache.org/ref/3.2.3/maven-model/maven.html#class_parent
    -->
    <relativePath />
  </parent>
  <groupId>org.xwiki.platform</groupId>
  <artifactId>xwiki-platform</artifactId>
  <name>XWiki Platform - Parent POM</name>
  <packaging>pom</packaging>
  <version>8.4.2</version>
  <description>XWiki Platform - Parent POM</description>
  <properties>
    <!-- Useful for external Maven projects that extend the Platform POM. Must not be used by Platform project! -->
    <platform.version>${commons.version}</platform.version>
    <!-- Versions of XWiki dependencies used in Platform modules -->
    <rendering.version>${platform.version}</rendering.version>
    <!-- Version of HSQLDB that we use in Platform when import XARs for creating functional test environments -->
    <hsqldb.version>2.3.4</hsqldb.version>
    <!-- By default check that unit tests don't output anything to the console -->
    <xwiki.surefire.captureconsole.skip>false</xwiki.surefire.captureconsole.skip>
  </properties>
  <scm>
    <connection>scm:git:git://github.com/xwiki/xwiki-platform.git</connection>
    <developerConnection>scm:git:git@github.com:xwiki/xwiki-platform.git</developerConnection>
    <url>https://github.com/xwiki/xwiki-platform/tree/master/</url>
    <tag>xwiki-platform-8.4.2</tag>
  </scm>
  <issueManagement>
    <system>jira</system>
    <url>http://jira.xwiki.org/jira/browse/XWIKI</url>
  </issueManagement>
  <modules>
    <module>xwiki-platform-tools</module>
    <module>xwiki-platform-core</module>
    <module>xwiki-platform-distribution</module>
  </modules>
  <!-- Dependency Management that are used in platform and in sub-projects too (like xwiki-enterprise) -->
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.webjars</groupId>
        <artifactId>bootstrap-select</artifactId>
        <version>1.12.0</version>
        <scope>runtime</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <configuration>
            <includes>
              <include>**/*Test.java</include>
              <include>**/*IntegrationTests.java</include>
            </includes>
            <!-- Verify that unit tests don't output anything to stdout/stderr -->
            <systemProperties combine.children="append">
              <!-- This property makes it simple for some module to exclude the check (for example for functional
                   tests) -->
              <property>
                <name>xwiki.surefire.captureconsole.skip</name>
                <value>${xwiki.surefire.captureconsole.skip}</value>
              </property>
            </systemProperties>
            <properties>
              <property>
                <name>listener</name>
                <value>org.xwiki.test.CaptureConsoleRunListener</value>
              </property>
            </properties>
          </configuration>
          <dependencies>
            <dependency>
              <groupId>org.xwiki.commons</groupId>
              <artifactId>xwiki-commons-tool-test-simple</artifactId>
              <version>${commons.version}</version>
            </dependency>
          </dependencies>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <configuration>
            <tags>
              <!-- Tag to document a xwiki.cfg configuration file property behavior -->
              <tag>
                <name>xwiki.xwikicfg</name>
                <placement>a</placement>
                <head>xwiki.cfg configuration:</head>
              </tag>
            </tags>
          </configuration>
        </plugin>
        <!-- Overwrite various properties while generating extension descriptors -->
        <plugin>
          <groupId>org.xwiki.commons</groupId>
          <artifactId>xwiki-commons-tool-extension-plugin</artifactId>
          <version>${commons.version}</version>
          <configuration>
            <extensionOverrides>
              <!-- Should ok for any version of jcl-over-slf4j (since commons-logging is dead) -->
              <extensionOverride>
                <id>org.slf4j:jcl-over-slf4j</id>
                <features>commons-logging:commons-logging/1.2</features>
              </extensionOverride>
              <!-- Should ok for any version of log4j-over-slf4j (since log4j 1.x is dead) -->
              <extensionOverride>
                <id>org.slf4j:log4j-over-slf4j</id>
                <features>log4j:log4j/1.2.17</features>
              </extensionOverride>
              <!-- For Jython 2.7.0 (don't forget to refresh it when Jython version id changed !) -->
              <extensionOverride>
                <id>org.python:jython-standalone</id>
                <features>
                  org.python:jython,
                  com.github.jnr:jffi/1.2.7,
                  com.github.jnr:jnr-constants/0.8.6,
                  com.github.jnr:jnr-ffi/2.0.1,
                  com.github.jnr:jnr-netdb/1.1.4,
                  com.github.jnr:jnr-posix/3.0.9
                </features>
              </extensionOverride>
            </extensionOverrides>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <!-- Apply the Checkstyle configurations defined in the top level pom.xml file -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
      </plugin>
      <!-- Check license headers -->
      <plugin>
        <groupId>com.mycila</groupId>
        <artifactId>license-maven-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <executions>
          <!-- Verify that all org.xwiki.commons dependencies have a version specified either as:
               - ${commons.version}
               - a value not starting with $ (we want to allow supporting ranges)
               Also verifies that all org.xwiki.rendering dependencies have a version specified either as:
               - ${rendering.version}
               - a value not starting with $ (we want to allow supporting ranges)
               Also verifies that all org.xwiki.platform dependencies have a version specified either as:
               - ${project.version}
               - a value not starting with $ (we want to allow supporting ranges)
          -->
          <execution>
            <id>check-dependency-version</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <validateDependencyVersion implementation="org.xwiki.tool.enforcer.ValidateDependencyVersion">
                  <versionCheck>
                    <groupIdPrefix>org.xwiki.commons</groupIdPrefix>
                    <allowedVersionRegex>\$\{commons.version\}|[^$].*</allowedVersionRegex>
                  </versionCheck>
                  <versionCheck>
                    <groupIdPrefix>org.xwiki.rendering</groupIdPrefix>
                    <allowedVersionRegex>\$\{rendering.version\}|[^$].*</allowedVersionRegex>
                  </versionCheck>
                  <versionCheck>
                    <groupIdPrefix>org.xwiki.platform</groupIdPrefix>
                    <allowedVersionRegex>\$\{project.version\}|[^$].*</allowedVersionRegex>
                  </versionCheck>
                </validateDependencyVersion>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  <profiles>
    <profile>
      <id>clover</id>
      <properties>
        <!-- Don't check that unit tests don't output anything to the console since for example Clover will output
             messages such as "Updating existing database at '...'." during tests! -->
        <xwiki.surefire.captureconsole.skip>true</xwiki.surefire.captureconsole.skip>
      </properties>
    </profile>
  </profiles>
</project>
