<?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.
-->
<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">
  <parent>
    <artifactId>meecrowave</artifactId>
    <groupId>org.apache.meecrowave</groupId>
    <version>1.2.9-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>

  <artifactId>integration-tests</artifactId>
  <name>Meecrowave :: Integration Tests</name>
  <packaging>pom</packaging>
  <description>
    For modules requiring custom classpaths.
  </description>

  <properties>
    <deploy.skip>true</deploy.skip> <!-- as default we don't deploy our integration-test modules upstream -->
  </properties>

  <modules>
    <module>app-groovy</module>
    <module>beanvalidation</module>
    <module>webservices</module>
    <module>ssl</module>
    <module>sse</module>
    <module>no-cxf</module>
    <module>dispatch-jsp</module>
  </modules>

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