<?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-examples</artifactId>
    <version>1.2</version>
  </parent>

  <groupId>org.apache.commons</groupId>
  <artifactId>commons-rng-examples-jpms</artifactId>
  <version>1.2</version>
  <packaging>pom</packaging>
  <name>JPMS Integration test</name>

  <description>Testing JPMS. Code in this module is not part of the public API.</description>

  <properties>
    <!-- Workaround to avoid duplicating config files. -->
    <rng.parent.dir>${basedir}/../..</rng.parent.dir>

    <!-- Java language level. -->
    <maven.compiler.source>9</maven.compiler.source>
    <maven.compiler.target>9</maven.compiler.target>
    <animal.sniffer.skip>true</animal.sniffer.skip>
    <maven.compiler.release>9</maven.compiler.release>
  </properties>

  <modules>
    <module>jpms-lib</module>
    <module>jpms-app</module>
  </modules>
</project>
