<?xml version="1.0"?>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-rng-parent</artifactId>
    <version>1.3</version>
  </parent>

  <groupId>org.apache.commons</groupId>
  <artifactId>commons-rng-examples</artifactId>
  <version>1.3</version>
  <packaging>pom</packaging>
  <name>Apache Commons RNG Examples</name>

  <description>Examples of use of the "Commons RNG" library.
  Codes in this module and its sub-modules are not part of the library.
  They provide checking, benchmarking tools to enhance the documentation
  and to help ensure correctness of the implementations.</description>

  <properties>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>

    <!-- OSGi -->
    <commons.osgi.symbolicName>org.apache.commons.rng.examples</commons.osgi.symbolicName>
    <commons.osgi.export>org.apache.commons.rng.examples</commons.osgi.export>
    <!-- Java 9+ -->
    <commons.automatic.module.name>org.apache.commons.rng.examples</commons.automatic.module.name>
    <!-- Workaround to avoid duplicating config files. -->
    <rng.parent.dir>${basedir}/..</rng.parent.dir>

    <rng.picocli.version>3.9.5</rng.picocli.version>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-rng-simple</artifactId>
        <version>1.3</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-rng-sampling</artifactId>
        <version>1.3</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-rng-client-api</artifactId>
        <version>1.3</version>
      </dependency>
      <dependency>
        <groupId>info.picocli</groupId>
        <artifactId>picocli</artifactId>
        <version>${rng.picocli.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>exec-maven-plugin</artifactId>
          <version>1.6.0</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

  <modules>
    <module>examples-stress</module>
    <module>examples-sampling</module>
    <module>examples-quadrature</module>
    <module>examples-jmh</module>
    <module>examples-jpms</module>
  </modules>
</project>
