<?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">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>com.opengamma</groupId>
    <artifactId>corporate-parent</artifactId>
    <version>2.3.0</version>
    <relativePath></relativePath>
  </parent>  
  <groupId>com.opengamma.strata</groupId>
  <artifactId>strata-parent</artifactId>
  <version>1.7.0</version>
  <packaging>pom</packaging>
  <name>Strata-Parent</name>
  <description>OpenGamma Strata Parent</description>

  <!-- ==================================================================== -->
  <licenses>
    <license>
      <name>The Apache Software License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
    </license>
  </licenses>

  <!-- ==================================================================== -->
  <issueManagement>
    <system>GitHub</system>
    <url>https://github.com/OpenGamma/Strata/issues</url>
  </issueManagement>
  <inceptionYear>2009</inceptionYear>
  <mailingLists>
    <mailingList>
      <name>OpenGamma forum</name>
      <archive>http://forums.opengamma.com/</archive>
    </mailingList>
  </mailingLists>
  <scm>
    <connection>scm:git:https://github.com/OpenGamma/Strata.git</connection>
    <developerConnection>scm:git:https://github.com/OpenGamma/Strata.git</developerConnection>
    <url>https://github.com/OpenGamma/Strata</url>
  </scm>

  <!-- ==================================================================== -->
  <modules>
    <module>basics</module>
    <module>collect</module>
    <module>data</module>
    <module>product</module>
    <module>market</module>
    <module>loader</module>
    <module>math</module>
    <module>pricer</module>
    <module>calc</module>
    <module>measure</module>
    <module>report</module>
  </modules>

  <!-- ==================================================================== -->
  <!-- standard build setup -->
  <build>
    <resources>
      <!-- Include all standard resources -->
      <resource>
        <directory>src/main/resources</directory>
      </resource>
      <!-- Include LICENSE/NOTICE in jar files -->
      <resource>
        <directory>${root.dir}</directory>
        <targetPath>META-INF</targetPath>
        <includes>
          <include>LICENSE.txt</include>
          <include>NOTICE.txt</include>
        </includes>
      </resource>
    </resources>
    <testResources>
      <!-- Include all standard resources -->
      <testResource>
        <directory>src/test/resources</directory>
      </testResource>
      <!-- Include LICENSE/NOTICE in test jar files -->
      <testResource>
        <directory>${root.dir}</directory>
        <targetPath>META-INF</targetPath>
        <includes>
          <include>LICENSE.txt</include>
          <include>NOTICE.txt</include>
        </includes>
      </testResource>
    </testResources>
    <plugins>
      <!-- javadoc -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <configuration>
          <links>
            <link>http://www.joda.org/joda-beans/apidocs</link>
            <link>http://www.joda.org/joda-convert/apidocs</link>
            <link>https://google.github.io/guava/releases/${guava.version}/api/docs/</link>
          </links>
          <!-- The "allow-script-in-comments" is needed for 1.8.0_u121 and later -->
          <!-- but when it is present on earlier JDK 8 builds Javadoc will complain about an unrecognised flag -->
          <!-- If that happens to you, delete the following line -->
          <additionalparam>--allow-script-in-comments -Xdoclint:missing -Xdoclint:reference</additionalparam>
        </configuration>
      </plugin>
      <!--  checkstyle -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <dependencies>
          <dependency>
            <groupId>com.puppycrawl.tools</groupId>
            <artifactId>checkstyle</artifactId>
            <version>7.4</version>
          </dependency>
          <dependency>
            <groupId>com.opengamma</groupId>
            <artifactId>build-config</artifactId>
            <version>2.1.0</version>
          </dependency>
        </dependencies>
        <executions>
          <execution>
            <id>run-checkstyle</id>
            <phase>process-sources</phase>
            <goals>
              <goal>checkstyle</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <includeResources>false</includeResources>
          <includeTestResources>false</includeTestResources>
          <includeTestSourceDirectory>false</includeTestSourceDirectory>
          <consoleOutput>true</consoleOutput>
          <failsOnError>true</failsOnError>
        </configuration>
      </plugin>
      <!--  obtain git commit -->
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>buildnumber-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>buildnumber</id>
            <phase>process-sources</phase>
            <goals>
              <goal>create</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <!-- create and publish test jar files -->
      <!-- include build number in jar files -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <executions>
          <execution>
            <id>default-jar</id>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
          <execution>
            <id>test-jar</id>
            <goals>
              <goal>test-jar</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <skipIfEmpty>true</skipIfEmpty>
          <archive>
            <manifestEntries>
              <Automatic-Module-Name>${jpms.module.name}</Automatic-Module-Name>
              <Implementation-Build>${buildNumber}</Implementation-Build>
              <Implementation-Date>${maven.build.timestamp}</Implementation-Date>
              <Implementation-Build-Id>${ci.build}</Implementation-Build-Id>
            </manifestEntries>
          </archive>
        </configuration>
      </plugin>
      <!-- Enforce maven version -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <executions>
          <execution>
            <id>enforce-maven-version</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <dependencyConvergence />
                <requireMavenVersion>
                  <version>[3.2.0,)</version>
                </requireMavenVersion>
                <requireNoRepositories />
                <requirePluginVersions />
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <!-- attach site -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-site-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>attach-descriptor</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <!-- Block bad APIs -->
      <plugin>
        <groupId>de.thetaphi</groupId>
        <artifactId>forbiddenapis</artifactId>
        <configuration>
          <internalRuntimeForbidden>true</internalRuntimeForbidden>
          <failOnUnsupportedJava>false</failOnUnsupportedJava>
          <bundledSignatures>
            <bundledSignature>jdk-unsafe</bundledSignature>
            <bundledSignature>jdk-deprecated</bundledSignature>
          </bundledSignatures>
        </configuration>
        <executions>
          <execution>
            <goals>
              <goal>check</goal>
              <goal>testCheck</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <!--  remove slow SuiteHTMLReporter - 
            already defined in corporate parent, but appears to be necessary for some configurations -->
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
	      <configuration>
	        <properties>
	            <property>
	                <name>usedefaultlisteners</name>
	                <value>false</value>
	            </property>
	        </properties>
	      </configuration>
	 </plugin>
    </plugins>
  </build>

  <!-- ==================================================================== -->
  <!-- all modules get these dependencies -->
  <dependencies>
    <dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.assertj</groupId>
      <artifactId>assertj-core</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <dependencyManagement>
    <dependencies>
      <!-- OpenGamma -->
      <dependency>
        <groupId>com.opengamma.strata</groupId>
        <artifactId>strata-collect</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opengamma.strata</groupId>
        <artifactId>strata-basics</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opengamma.strata</groupId>
        <artifactId>strata-product</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opengamma.strata</groupId>
        <artifactId>strata-data</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opengamma.strata</groupId>
        <artifactId>strata-math</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opengamma.strata</groupId>
        <artifactId>strata-market</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opengamma.strata</groupId>
        <artifactId>strata-loader</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opengamma.strata</groupId>
        <artifactId>strata-pricer</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opengamma.strata</groupId>
        <artifactId>strata-calc</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opengamma.strata</groupId>
        <artifactId>strata-measure</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opengamma.strata</groupId>
        <artifactId>strata-report</artifactId>
        <version>${project.version}</version>
      </dependency>
      <!-- Third party -->
      <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>${guava.version}</version>
        <exclusions>
          <exclusion>
            <groupId>com.google.errorprone</groupId>
            <artifactId>error_prone_annotations</artifactId>
          </exclusion>
          <exclusion>
            <groupId>com.google.j2objc</groupId>
            <artifactId>j2objc-annotations</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>animal-sniffer-annotations</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.checkerframework</groupId>
            <artifactId>checker-qual</artifactId>
          </exclusion>
          <exclusion>
            <groupId>com.google.code.findbugs</groupId>
            <artifactId>jsr305</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.joda</groupId>
        <artifactId>joda-convert</artifactId>
        <version>${joda-convert.version}</version>
      </dependency>
      <dependency>
        <groupId>org.joda</groupId>
        <artifactId>joda-beans</artifactId>
        <version>${joda-beans.version}</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-nop</artifactId>
        <version>${slf4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>${slf4j.version}</version>
      </dependency>
      <dependency>
        <groupId>com.beust</groupId>
        <artifactId>jcommander</artifactId>
        <version>${jcommander.version}</version>
      </dependency>
      <!-- Testing -->
      <dependency>
        <groupId>com.opengamma.strata</groupId>
        <artifactId>strata-collect</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>com.opengamma.strata</groupId>
        <artifactId>strata-basics</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>com.opengamma.strata</groupId>
        <artifactId>strata-product</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>com.opengamma.strata</groupId>
        <artifactId>strata-data</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>com.opengamma.strata</groupId>
        <artifactId>strata-math</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>com.opengamma.strata</groupId>
        <artifactId>strata-market</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>com.opengamma.strata</groupId>
        <artifactId>strata-loader</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>com.opengamma.strata</groupId>
        <artifactId>strata-pricer</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>com.opengamma.strata</groupId>
        <artifactId>strata-calc</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>com.opengamma.strata</groupId>
        <artifactId>strata-measure</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>${assertj.version}</version>
      </dependency>
      <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>${mockito.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <!-- ==================================================================== -->
  <distributionManagement>
    <repository>
      <id>og-public-release</id>
      <name>OpenGamma public maven repository</name>
      <url>${og-public-release.url}</url>
    </repository>
  </distributionManagement>

  <!-- ==================================================================== -->
  <profiles>
    <!-- build source and javadoc jars -->
    <profile>
      <id>extra-jars</id>
      <activation>
        <property>
          <name>oss.jars</name>
        </property>
      </activation>
      <build>
        <plugins>
          <!-- generate source jar file when packaging -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <executions>
              <execution>
                <id>attach-sources</id>
                <phase>package</phase>
                <goals>
                  <goal>jar-no-fork</goal>
                </goals>
                <configuration>
                  <skipIfEmpty>true</skipIfEmpty>
                  <archive>
                    <manifest>
                      <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                      <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                    </manifest>
                    <manifestEntries>
                      <Implementation-Build>${buildNumber}</Implementation-Build>
                      <Implementation-Date>${maven.build.timestamp}</Implementation-Date>
                      <Implementation-Build-Id>${ci.build}</Implementation-Build-Id>
                    </manifestEntries>
                  </archive>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <!-- generate javadoc jar file when packaging -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <executions>
              <execution>
                <id>attach-javadocs</id>
                <phase>package</phase>
                <goals>
                  <goal>jar</goal>
                </goals>
                <configuration>
                  <skipIfEmpty>true</skipIfEmpty>
                  <archive>
                    <manifest>
                      <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                      <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                    </manifest>
                    <manifestEntries>
                      <Implementation-Build>${buildNumber}</Implementation-Build>
                      <Implementation-Date>${maven.build.timestamp}</Implementation-Date>
                      <Implementation-Build-Id>${ci.build}</Implementation-Build-Id>
                    </manifestEntries>
                  </archive>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- apply strict build rules, activated with -Dstrict -->
    <profile>
      <id>strict</id>
      <activation>
        <property>
          <name>strict</name>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-enforcer-plugin</artifactId>
            <executions>
              <execution>
                <id>enforce</id>
                <goals>
                  <goal>enforce</goal>
                </goals>
                <configuration>
                  <rules>
                    <!-- no commons-logging or good/evil licensed json, junit only in test/provided -->
                    <bannedDependencies>
                      <excludes>
                        <exclude>commons-logging:*</exclude>
                        <exclude>org.json:json</exclude>
                        <exclude>junit:*</exclude>
                      </excludes>
                      <includes>
                        <include>junit:*:*:*:test</include>
                        <include>junit:*:*:*:provided</include>
                      </includes>
                    </bannedDependencies>
                    <banDuplicateClasses>
                      <ignoreClasses>
                        <ignoreClass>org.apache.commons.collections.ArrayStack</ignoreClass>
                        <ignoreClass>org.apache.commons.collections.Buffer</ignoreClass>
                        <ignoreClass>org.apache.commons.collections.BufferUnderflowException</ignoreClass>
                        <ignoreClass>org.apache.commons.collections.FastHashMap*</ignoreClass>
                        <ignoreClass>org.apache.tools.ant.ExitException</ignoreClass>
                      </ignoreClasses>
                      <findAllDuplicates>true</findAllDuplicates>
                    </banDuplicateClasses>
                    <!-- ensure dependencies resolve to latest version (removed as randomly fails MENFORCER-134) -->
                    <!--requireUpperBoundDeps /-->
                    <!-- need Java SE 8 or greater -->
                    <requireJavaVersion>
                      <version>[1.8,)</version>
                    </requireJavaVersion>
                    <requirePluginVersions>
                    </requirePluginVersions>
                  </rules>
                  <fail>true</fail>
                </configuration>
              </execution>
            </executions>
            <dependencies>
              <dependency>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>extra-enforcer-rules</artifactId>
                <version>1.0-beta-7</version>
              </dependency>
            </dependencies>
          </plugin>
          <!-- validate Joda-Beans -->
          <plugin>
            <groupId>org.joda</groupId>
            <artifactId>joda-beans-maven-plugin</artifactId>
            <executions>
              <execution>
                <phase>validate</phase>
                <goals>
                  <goal>validate</goal>
                </goals>
                <configuration>
                  <stopOnError>true</stopOnError>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- Check for incompatible changes -->
    <profile>
      <id>compat</id>
      <activation>
        <property>
          <name>compat</name>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>com.github.siom79.japicmp</groupId>
            <artifactId>japicmp-maven-plugin</artifactId>
            <executions>
              <execution>
                <phase>verify</phase>
                <goals>
                  <goal>cmp</goal>
                </goals>
                <configuration>
                  <parameter>
                    <onlyModified>true</onlyModified>
                    <skipXmlReport>true</skipXmlReport>
                  </parameter>
                  <oldVersion>
                    <dependency>
                      <groupId>${project.groupId}</groupId>
                      <artifactId>${project.artifactId}</artifactId>
                      <version>1.3.0</version>
                    </dependency>
                  </oldVersion>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <!--  merge files, only works when mvn command run a second time -->
          <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
              <execution>
                <phase>validate</phase>
                <goals>
                  <goal>run</goal>
                </goals>
                <inherited>false</inherited>
                <configuration>
                  <target>
                    <mkdir dir="${project.basedir}/target/japicmp" />
                    <concat destfile="${project.basedir}/target/japicmp/japicmp.diff" overwrite="true">
                      <fileset dir="${project.basedir}">
                        <include name="*/target/japicmp/japicmp.diff"></include>
                      </fileset>
                    </concat>
                  </target>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

  <!-- ==================================================================== -->
  <properties>
    <!-- Locate the root directory of the multi-module build -->
    <root.dir>${project.basedir}/..</root.dir>
    <!-- Versions -->
    <assertj.version>3.9.0</assertj.version>
    <guava.version>24.0-jre</guava.version>
    <jcommander.version>1.72</jcommander.version>
    <joda-convert.version>2.0</joda-convert.version>
    <joda-beans.version>2.1</joda-beans.version>
    <mockito.version>2.15.0</mockito.version>
    <slf4j.version>1.7.25</slf4j.version>
    <testng.version>6.14.2</testng.version>
    <maven-enforcer-plugin.version>3.0.0-M1</maven-enforcer-plugin.version>
    <!-- Properties for maven-checkstyle-plugin -->
    <checkstyle.config.location>checkstyle/checkstyle-oss.xml</checkstyle.config.location>
    <!-- Properties for maven-javadoc-plugin -->
    <windowtitle>OpenGamma Strata</windowtitle>
    <doctitle><![CDATA[<h1>OpenGamma Strata</h1>]]></doctitle>
    <header><![CDATA[<script type="text/x-mathjax-config">MathJax.Hub.Config({ tex2jax: { inlineMath: [ ['$','$'], ["\\\\(","\\\\)"] ],processEscapes: true} });</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=default"></script>]]></header>
    <bottom><![CDATA[<i>Copyright 2009-Present by OpenGamma Inc. and individual contributors</i><br/><i>${javadoc.footer.license}</i><br/><i>Additional documentation can be found at <a href="http://strata.opengamma.io">strata.opengamma.io</a>.</i><script type="text/javascript">var _gaq = _gaq || [];_gaq.push(['_setAccount', 'UA-12092825-8']);_gaq.push(['_trackPageview']);(function() {var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script>]]></bottom>
    <javadoc.footer.license>Apache v2 licensed</javadoc.footer.license>
  </properties>

</project>
