<?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>9.1</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>9.1</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>

    <!-- Dependencies versions -->
    <gwt.version>2.7.0</gwt.version>
    <gwt.maven.plugin.version>2.7.0</gwt.maven.plugin.version>
    <bootstrap.version>3.3.7-1</bootstrap.version>
    <batik.version>1.8</batik.version>

    <!-- By default check that unit tests don't output anything to the console -->
    <xwiki.surefire.captureconsole.skip>false</xwiki.surefire.captureconsole.skip>

    <!-- Follow the specifications regarding the WebJar content path. -->
    <webjar.outputDirectory>${project.build.outputDirectory}/META-INF/resources/webjars/${project.artifactId}/${project.version}</webjar.outputDirectory>
  </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-9.1</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>
      <!-- Standard dependencies used in several modules -->
      <dependency>
        <groupId>c3p0</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.1.2</version>
      </dependency>
      <!-- Jython engine -->
      <!-- We use a customized Jython JAR here because the standard one include many library we already get as dependencies -->
      <dependency>
        <groupId>org.python</groupId>
        <artifactId>jython-standalone</artifactId>
        <version>2.7.0-xwiki-3</version>
      </dependency>
      <!-- Used on remote observation and also by JBossCache/Infinispan (even if it does not really use it) -->
      <dependency>
        <groupId>org.jgroups</groupId>
        <artifactId>jgroups</artifactId>
        <version>3.6.13.Final</version>
      </dependency>
      <!-- Apache Tika used by several modules (Lucene, Office, etc) -->
      <dependency>
        <groupId>org.apache.tika</groupId>
        <artifactId>tika-core</artifactId>
        <version>1.14</version>
      </dependency>
      <dependency>
        <groupId>org.apache.tika</groupId>
        <artifactId>tika-parsers</artifactId>
        <version>1.14</version>
        <exclusions>
          <!-- We want to choose the SLF4J binding only when XWiki is packaged. -->
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging-api</artifactId>
          </exclusion>
          <!-- Exclude so that we control our own version of it. Note that Tika uses it for reading encrypted PDFs  -->
          <exclusion>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
          </exclusion>
          <!-- Exclude so that we control our own version of it. Note that Tika uses it for reading encrypted PDFs  -->
          <exclusion>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcmail-jdk15on</artifactId>
          </exclusion>
          <!-- Tika depends on junrar for handling RAR files and junrar itself depends on Commons VFS2 which depends on
               org.apache.maven.scm:maven-scm-provider-svnexe:jar:1.4. AFAIK we shouldn't require this dependency and
               we can safely exclude it. The other reason for excluding it is that it itself depends on
               regexp:regexp:jar:1.3 and this causes some duplicate class conflicts with Xalan, and we already depend
               on jakarta-regexp:jakarta-regexp. -->
          <exclusion>
            <artifactId>regexp</artifactId>
            <groupId>regexp</groupId>
          </exclusion>
          <!-- We don't need it the way we use Tika and it causes various conflicts -->
          <exclusion>
            <artifactId>cxf-rt-rs-client</artifactId>
            <groupId>org.apache.cxf</groupId>
          </exclusion>
        </exclusions>
      </dependency>
      <!-- Rome is used in rss macro and feed api modules and in Tika -->
      <dependency>
        <groupId>rome</groupId>
        <artifactId>rome</artifactId>
        <version>1.0</version>
        <exclusions>
          <!-- Exclude JDOM since Rome depends on jdom:jdom and we want to use org.jdom:jdom -->
          <exclusion>
            <groupId>jdom</groupId>
            <artifactId>jdom</artifactId>
          </exclusion>
          <!-- We want to choose the SLF4J binding only when XWiki is packaged. -->
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging-api</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>rome</groupId>
        <artifactId>rome-fetcher</artifactId>
        <version>1.0</version>
        <!-- Exclude JDOM since Rome depends on jdom:jdom and we want to use org.jdom:jdom -->
        <exclusions>
          <exclusion>
            <groupId>jdom</groupId>
            <artifactId>jdom</artifactId>
          </exclusion>
          <!-- We want to choose the SLF4J binding only when XWiki is packaged. -->
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging-api</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <!-- Replace the runtime transitive dependency we excluded above with this one which repackages the NekoHTML classes to prevent conflicts. -->
        <groupId>de.l3s.boilerpipe</groupId>
        <artifactId>boilerpipe</artifactId>
        <version>1.2.0-xwiki</version>
        <scope>runtime</scope>
      </dependency>
      <!-- Used by xwiki-platform-oldcore and xwiki-platform-captcha -->
      <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts-core</artifactId>
        <version>1.3.10</version>
        <exclusions>
          <!-- There is conflict with hibernate antlr-2.7.6 dependency -->
          <exclusion>
            <groupId>antlr</groupId>
            <artifactId>antlr</artifactId>
          </exclusion>
          <!-- We want to choose the SLF4J binding only when XWiki is packaged. -->
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts-taglib</artifactId>
        <version>1.3.10</version>
      </dependency>
      <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts-tiles</artifactId>
        <version>1.3.10</version>
      </dependency>
      <!-- Standard dependencies used in GWT modules -->
      <dependency>
        <groupId>com.google.gwt</groupId>
        <artifactId>gwt-user</artifactId>
        <version>${gwt.version}</version>
        <!-- Only needed at build time -->
        <scope>provided</scope>
      </dependency>
      <dependency>
        <groupId>com.google.gwt</groupId>
        <artifactId>gwt-servlet</artifactId>
        <version>${gwt.version}</version>
      </dependency>
      <!-- Used at least in Solr Search and in Infinispan Cache -->
      <dependency>
        <groupId>org.codehaus.woodstox</groupId>
        <artifactId>woodstox-core-asl</artifactId>
        <version>4.4.1</version>
        <exclusions>
          <!-- Already part of Java SE 6 -->
          <exclusion>
            <artifactId>stax-api</artifactId>
            <groupId>javax.xml.stream</groupId>
          </exclusion>
        </exclusions>
      </dependency>
      <!-- Drawn by several transitive dependencies -->
      <dependency>
        <groupId>org.jfree</groupId>
        <artifactId>jfreechart</artifactId>
        <version>1.0.19</version>
      </dependency>
      <!-- Used directly and indirectly in various projects. -->
      <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>2.9.7</version>
      </dependency>
      <!-- Common WebJars -->
      <dependency>
        <groupId>org.webjars</groupId>
        <artifactId>requirejs</artifactId>
        <version>2.2.0</version>
        <scope>runtime</scope>
      </dependency>
      <dependency>
        <groupId>org.webjars</groupId>
        <artifactId>jquery</artifactId>
        <version>2.2.2</version>
        <scope>runtime</scope>
      </dependency>
      <dependency>
        <groupId>org.webjars</groupId>
        <artifactId>bootstrap-select</artifactId>
        <version>1.12.0</version>
        <scope>runtime</scope>
      </dependency>
      <dependency>
        <groupId>org.webjars</groupId>
        <artifactId>bootstrap</artifactId>
        <version>${bootstrap.version}</version>
        <scope>runtime</scope>
      </dependency>

      <!-- All Batik artifacts should be in sync -->
      <dependency>
        <groupId>org.apache.xmlgraphics</groupId>
        <artifactId>batik-rasterizer</artifactId>
        <version>${batik.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.xmlgraphics</groupId>
        <artifactId>batik-bridge</artifactId>
        <version>${batik.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.xmlgraphics</groupId>
        <artifactId>batik-css</artifactId>
        <version>${batik.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.xmlgraphics</groupId>
        <artifactId>batik-util</artifactId>
        <version>${batik.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.xmlgraphics</groupId>
        <artifactId>batik-codec</artifactId>
        <version>${batik.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.xmlgraphics</groupId>
        <artifactId>batik-ext</artifactId>
        <version>${batik.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.xmlgraphics</groupId>
        <artifactId>batik-extension</artifactId>
        <version>${batik.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.xmlgraphics</groupId>
        <artifactId>batik-transcoder</artifactId>
        <version>${batik.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.xmlgraphics</groupId>
        <artifactId>batik-gvt</artifactId>
        <version>${batik.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.xmlgraphics</groupId>
        <artifactId>batik-svg-dom</artifactId>
        <version>${batik.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.xmlgraphics</groupId>
        <artifactId>batik-awt-util</artifactId>
        <version>${batik.version}</version>
      </dependency>

      <dependency>
        <groupId>net.java.dev.jna</groupId>
        <artifactId>jna</artifactId>
        <version>4.2.2</version>
      </dependency>

      <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>2.2.3</version>
      </dependency>

      <dependency>
        <groupId>org.ccil.cowan.tagsoup</groupId>
        <artifactId>tagsoup</artifactId>
        <version>1.2.1</version>
      </dependency>

      <!-- PDF -->
      <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox</artifactId>
        <version>2.0.4</version>
      </dependency>
      <dependency>
      <groupId>org.apache.xmlgraphics</groupId>
      <artifactId>fop</artifactId>
      <version>2.1</version>
      <exclusions>
        <!-- We want to choose the SLF4J binding only when XWiki is packaged. -->
        <exclusion>
          <groupId>commons-logging</groupId>
          <artifactId>commons-logging</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.apache.xmlgraphics</groupId>
      <artifactId>xmlgraphics-commons</artifactId>
      <version>2.1</version>
      <exclusions>
        <!-- We want to choose the SLF4J binding only when XWiki is packaged. -->
        <exclusion>
          <groupId>commons-logging</groupId>
          <artifactId>commons-logging</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    </dependencies>
  </dependencyManagement>
  <build>
    <extensions>
      <!-- Needed to add support for the "webjar" packaging -->
      <extension>
        <groupId>org.xwiki.commons</groupId>
        <artifactId>xwiki-commons-tool-webjar-handlers</artifactId>
        <version>${commons.version}</version>
      </extension>
    </extensions>
    <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>
