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

  <parent>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-numbers-parent</artifactId>
    <version>1.2-SNAPSHOT</version>
  </parent>

  <artifactId>commons-numbers-examples</artifactId>
  <packaging>pom</packaging>
  <name>Apache Commons Numbers Examples</name>

  <description>Examples of use of the "Commons Numbers" 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>
    <!-- OSGi -->
    <commons.osgi.symbolicName>org.apache.commons.numbers.examples</commons.osgi.symbolicName>
    <commons.osgi.export>org.apache.commons.numbers.examples</commons.osgi.export>
    <!-- Java 9+ -->
    <commons.module.name>org.apache.commons.numbers.examples</commons.module.name>
    <!-- Workaround to avoid duplicating config files. -->
    <numbers.parent.dir>${basedir}/..</numbers.parent.dir>
    <numbers.jira.component>examples</numbers.jira.component>

    <!-- Disable JApiCmp failures (but keep the report). The examples API is allowed to change. -->
    <commons.japicmp.breakBuildOnBinaryIncompatibleModifications>false</commons.japicmp.breakBuildOnBinaryIncompatibleModifications>
    <commons.japicmp.breakBuildOnSourceIncompatibleModifications>false</commons.japicmp.breakBuildOnSourceIncompatibleModifications>
  </properties>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-pmd-plugin</artifactId>
        <configuration>
          <failOnViolation>false</failOnViolation>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <modules>
    <module>examples-jmh</module>
  </modules>
</project>
