<?xml version="1.0" encoding="UTF-8"?>
<!--

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

<!-- $Rev$ $Date$ -->

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

  <parent>
    <artifactId>tomee-project</artifactId>
    <groupId>org.apache.tomee</groupId>
    <version>10.0.0-SNAPSHOT</version>
  </parent>

  <modelVersion>4.0.0</modelVersion>
  <artifactId>itests</artifactId>
  <packaging>pom</packaging>
  <name>TomEE :: iTests</name>

  <modules>
    <module>tomee-server-composer</module>
    <module>tomee-server-version</module>
    <module>microprofile-jwt-itests</module>
    <module>failover</module>
    <module>failover-ejb</module>
    <module>legacy-client</module>
    <module>legacy-server</module>
    <module>openejb-itests-app</module>
    <module>openejb-itests-beans</module>
    <module>openejb-itests-client</module>
    <module>openejb-itests-interceptor-beans</module>
    <module>openejb-itests-servlets</module>
    <module>openejb-itests-web</module>
    <module>jaxrs</module>
    <module>itest-common</module>
    <module>itest-util</module>
    <module>tomee-security-itests</module>
    <module>tomee-microprofile-itests</module>
  </modules>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>${version.plugin.javadoc}</version>
        <configuration>
          <skip>true</skip>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

