<?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/maven-v4_0_0.xsd">
  <parent>
    <artifactId>container</artifactId>
    <groupId>org.apache.openejb</groupId>
    <version>3.0-beta-1</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <artifactId>openejb-jee</artifactId>
  <packaging>jar</packaging>
  <name>OpenEJB :: Container :: Java EE</name>
  <build>
      <plugins>
          <!--<plugin>-->
              <!--<artifactId>maven-surefire-plugin</artifactId>-->
              <!--<configuration>-->
                  <!--<excludes>-->
                      <!--<exclude>org/openejb/jee2/EjbJarTest.*</exclude>-->
                  <!--</excludes>-->
              <!--</configuration>-->
          <!--</plugin>-->
      </plugins>
  </build>
  <dependencies>
    <dependency>
        <groupId>org.apache.geronimo.specs</groupId>
        <artifactId>geronimo-activation_1.1_spec</artifactId>
        <version>1.0-M1</version>
    </dependency>
    <dependency>
      <groupId>com.sun.xml.bind</groupId>
      <artifactId>jaxb-impl</artifactId>
      <version>2.0.3</version>
      <exclusions>
	<exclusion>
	  <groupId>javax.xml</groupId>
	  <artifactId>jsr173</artifactId>
	</exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.apache.xbean</groupId>
      <artifactId>xbean-finder</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.geronimo.specs</groupId>
        <artifactId>geronimo-stax-api_1.0_spec</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
    </dependency>
  </dependencies>
</project>
