<?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">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache</groupId>
    <artifactId>apache</artifactId>
    <version>18</version>
  </parent>

  <groupId>org.apache.meecrowave</groupId>
  <artifactId>meecrowave</artifactId>
  <version>1.2.1</version>
  <packaging>pom</packaging>

  <name>Meecrowave</name>
  <description>A small Tomcat/OWB/CXF/Johnzon/log4j2 based server @ ASF</description>

  <scm>
    <connection>scm:svn:http://svn.apache.org/repos/asf/openwebbeans/meecrowave/tags/meecrowave-1.2.1</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/openwebbeans/meecrowave/tags/meecrowave-1.2.1</developerConnection>
    <url>https://svn.apache.org/repos/asf/openwebbeans/meecrowave/tags/meecrowave-1.2.1</url>
  </scm>

  <issueManagement>
    <system>jira</system>
    <url>http://issues.apache.org/jira/browse/MEECROWAVE</url>
  </issueManagement>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <junit.version>4.12</junit.version>
    <tomcat.version>9.0.5</tomcat.version>
    <openwebbeans.version>2.0.4</openwebbeans.version>
    <cxf.version>3.2.2</cxf.version>
    <johnzon.version>1.1.7</johnzon.version>
    <log4j2.version>2.10.0</log4j2.version>
    <deltaspike.version>1.8.1</deltaspike.version>
    <jaxb.version>2.2.11</jaxb.version>
    <openjpa.version>2.4.2</openjpa.version>
    <jpa-spec.version>1.0-alpha-1</jpa-spec.version>
    <h2.version>1.4.196</h2.version>
    <dbcp2.version>2.2.0</dbcp2.version>
    <commons-cli.version>1.4</commons-cli.version>
    <xbean.version>4.6</xbean.version>
  </properties>

  <modules>
    <module>meecrowave-core</module>
    <module>meecrowave-maven-plugin</module>
    <module>meecrowave-gradle-plugin</module>
    <module>meecrowave-junit</module>
    <module>meecrowave-arquillian</module>
    <module>meecrowave-jpa</module>
    <module>meecrowave-jolokia</module>
    <module>meecrowave-doc</module>
    <module>meecrowave-jta</module>
    <module>integration-tests</module>
    <module>meecrowave-oauth2</module>
    <module>sample</module>
  </modules>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <trimStackTrace>false</trimStackTrace>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-release-plugin</artifactId>
        <configuration>
          <autoVersionSubmodules>true</autoVersionSubmodules>
        </configuration>
      </plugin>

    </plugins>
  </build>

<!-- only needed when under development
  <repositories>
    <repository>
      <id>asf-snapshot</id>
      <url>https://repository.apache.org/content/repositories/snapshots/</url>
      <releases>
        <enabled>false</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
  </repositories>
-->
</project>
