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

  <groupId>org.superbiz</groupId>
  <artifactId>mvc-cxf-hibernate</artifactId>
  <packaging>war</packaging>

  <name>TomEE :: Examples :: MVC (CXF-based) with Hibernate</name>
  <description>OpenEJB :: Web Examples :: MVC 1.0 - Deltaspike - Hibernate</description>
  <version>8.0.2</version>
  <url>http://tomee.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <tomee.version>8.0.2</tomee.version>
    <version.deltaspike>1.9.3</version.deltaspike>
    <version.krazo>1.1.0-M1</version.krazo>
    <version.arquillian>1.1.13.Final</version.arquillian>
    <version.graphene.webdriver>2.3.1</version.graphene.webdriver>
  </properties>

  <build>
    <finalName>mvc-cxf</finalName>
    <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-war-plugin</artifactId>
        <version>3.1.0</version>
      </plugin>
      <plugin>
        <groupId>org.apache.tomee.maven</groupId>
        <artifactId>tomee-maven-plugin</artifactId>
        <version>8.0.2</version>
        <configuration>
          <args>-Xmx512m -XX:PermSize=256m</args>
          <libs>
            <!-- add hibernate -->
            <lib>org.hibernate:hibernate-entitymanager:4.3.9.Final</lib>
            <lib>org.hibernate:hibernate-core:4.3.9.Final</lib>
            <lib>org.hibernate.common:hibernate-commons-annotations:4.0.5.Final</lib>
            <lib>antlr:antlr:2.7.7</lib>
            <lib>org.jboss:jandex:1.1.0.Final</lib>
            <lib>org.jboss.logging:jboss-logging:3.1.3.GA</lib>
            <lib>org.jboss.logging:jboss-logging-annotations:1.2.0.Beta1</lib>
            <lib>dom4j:dom4j:1.6.1</lib>
            <lib>org.javassist:javassist:3.18.1-GA</lib>
            <lib>remove:openjpa</lib>
          </libs>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <repositories>
    <repository>
      <id>apache-m2-snapshot</id>
      <name>Apache Snapshot Repository</name>
      <url>https://repository.apache.org/content/groups/snapshots</url>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
  </repositories>

  <dependencies>
    <dependency>
      <groupId>org.apache.tomee</groupId>
      <artifactId>javaee-api</artifactId>
      <version>[8.0,)</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.deltaspike.modules</groupId>
      <artifactId>deltaspike-data-module-api</artifactId>
      <version>${version.deltaspike}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.deltaspike.modules</groupId>
      <artifactId>deltaspike-data-module-impl</artifactId>
      <version>${version.deltaspike}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.deltaspike.cdictrl</groupId>
      <artifactId>deltaspike-cdictrl-api</artifactId>
      <version>${version.deltaspike}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.deltaspike.modules</groupId>
      <artifactId>deltaspike-jpa-module-api</artifactId>
      <version>${version.deltaspike}</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.deltaspike.modules</groupId>
      <artifactId>deltaspike-jpa-module-impl</artifactId>
      <version>${version.deltaspike}</version>
      <scope>runtime</scope>
    </dependency>

    <!-- MVC 1.0(JSR 371) -->
    <dependency>
      <groupId>org.eclipse.krazo</groupId>
      <artifactId>krazo-core</artifactId>
      <version>${version.krazo}</version>
    </dependency>
    <dependency>
      <groupId>org.eclipse.krazo</groupId>
      <artifactId>krazo-cxf</artifactId>
      <version>${version.krazo}</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

    <dependency>
      <groupId>org.eclipse.persistence</groupId>
      <artifactId>eclipselink</artifactId>
      <version>2.6.3</version>
    </dependency>

    <!--  tests  -->
    <dependency>
      <groupId>org.jboss.arquillian.junit</groupId>
      <artifactId>arquillian-junit-container</artifactId>
      <version>${version.arquillian}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.tomee</groupId>
      <artifactId>arquillian-tomee-remote</artifactId>
      <version>${tomee.version}</version>
    </dependency>
    <dependency>
      <groupId>org.jboss.arquillian.graphene</groupId>
      <artifactId>graphene-webdriver</artifactId>
      <version>${version.graphene.webdriver}</version>
      <type>pom</type>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.github.cukespace</groupId>
      <artifactId>cukespace-core</artifactId>
      <version>1.6.7</version>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>org.jboss.shrinkwrap</groupId>
          <artifactId>shrinkwrap-api</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.apache.tomee</groupId>
      <artifactId>ziplock</artifactId>
      <version>8.0.2</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <!--
  This section allows you to configure where to publish libraries for sharing.
  It is not required and may be deleted.  For more information see:
  http://maven.apache.org/plugins/maven-deploy-plugin/
  -->
  <distributionManagement>
    <repository>
      <id>localhost</id>
      <url>file://${basedir}/target/repo/</url>
    </repository>
    <snapshotRepository>
      <id>localhost</id>
      <url>file://${basedir}/target/snapshot-repo/</url>
    </snapshotRepository>
  </distributionManagement>

</project>
