<?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.
-->
<!--test 2-->
<!-- $Rev: 1628758 $ $Date: 2014-10-01 16:33:18 +0000 (Wed, 01 Oct 2014) $ -->

<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>openejb</artifactId>
    <groupId>org.apache.openejb</groupId>
    <version>5.0.0-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <artifactId>examples</artifactId>
  <packaging>pom</packaging>
  <name>OpenEJB :: Examples</name>
  <modules>
    <module>access-timeout-meta</module>
    <module>access-timeout</module>
    <module>alternate-descriptors</module>
    <module>application-composer</module>
    <module>applicationcomposer-jaxws-cdi</module>
    <module>applicationexception</module>
    <module>arquillian-jpa</module>
    <module>async-methods</module>
    <module>async-postconstruct</module>
    <module>bean-validation-design-by-contract</module>
    <module>cdi-alternative-and-stereotypes</module>
    <module>cdi-application-scope</module>
    <module>cdi-basic</module>
    <module>cdi-ejbcontext-jaas</module>
    <module>cdi-events</module>
    <module>cdi-interceptors</module>
    <module>cdi-produces-disposes</module>
    <module>cdi-produces-field</module>
    <module>cdi-realm</module>
    <module>cdi-request-scope</module>
    <module>cdi-session-scope</module>
    <module>change-jaxws-url</module>
    <module>component-interfaces</module>
    <module>client-resource-lookup-preview</module>
    <module>cucumber-jvm</module>
    <module>custom-injection</module>
    <module>datasource-ciphered-password</module>
    <module>datasource-definition</module>
    <module>datasource-versioning</module>
    <module>decorators</module>
    <module>deltaspike-configproperty</module>
    <module>deltaspike-exception-handling</module>
    <module>deltaspike-fullstack</module>
    <module>deltaspike-i18n</module>
    <module>dynamic-dao-implementation</module>
    <module>dynamic-datasource-routing</module>
    <module>dynamic-implementation</module>
    <module>dynamic-proxy-to-access-mbean</module>
    <module>ear-testing</module>
    <module>ejb-examples</module>
    <module>ejb-webservice</module>
    <module>groovy-cdi</module>
    <module>groovy-jpa</module>
    <module>groovy-spock</module>
    <module>helloworld-weblogic</module>
    <module>injection-of-connectionfactory</module>
    <module>injection-of-datasource</module>
    <module>injection-of-ejbs</module>
    <module>injection-of-entitymanager</module>
    <module>injection-of-env-entry</module>
    <module>interceptors</module>
    <module>jpa-eclipselink</module>
    <module>jpa-hibernate</module>
    <module>jpa-enumerated</module>
    <module>jsf-managedBean-and-ejb</module>
    <module>jsf-cdi-and-ejb</module>
    <module>lookup-of-ejbs</module>
    <module>lookup-of-ejbs-with-descriptor</module>
    <module>mbean-auto-registration</module>
    <module>movies-complete-meta</module>
    <module>movies-complete</module>
    <module>mtom</module>
    <module>multi-jpa-provider-testing</module>
    <module>multiple-arquillian-adapters</module>
    <module>multiple-tomee-arquillian</module>
    <module>myfaces-codi-demo</module>
    <module>persistence-fragment</module>
    <module>pojo-webservice</module>
    <module>polling-parent</module>
    <module>projectstage-demo</module>
    <module>quartz-app</module>
    <module>realm-in-tomee</module>
    <module>reload-persistence-unit-properties</module>
    <module>resources-declared-in-webapp</module>
    <module>rest-applicationcomposer-mockito</module>
    <module>rest-applicationcomposer</module>
    <module>rest-cdi</module>
    <module>rest-jaas</module>
    <module>rest-on-ejb</module>
    <module>rest-example</module>
    <module>rest-example-with-application</module>
    <module>rest-xml-json</module>
    <module>scala-basic</module>
    <module>schedule-expression</module>
    <module>schedule-events</module>
    <module>schedule-methods-meta</module>
    <module>schedule-methods</module>
    <module>server-events</module>
    <module>simple-cdi-interceptor</module>
    <module>simple-cmp2</module>
    <module>simple-mdb-and-cdi</module>
    <module>simple-mdb</module>
    <module>simple-mdb-with-descriptor</module>
    <module>simple-osgi</module>
    <module>simple-rest</module>
    <module>simple-singleton</module>
    <module>simple-stateful</module>
    <module>simple-stateful-callbacks</module>
    <module>simple-stateless</module>
    <module>simple-stateless-callbacks</module>
    <module>simple-stateless-with-descriptor</module>
    <module>simple-webservice</module>
    <module>simple-webservice-without-interface</module>
    <module>spring-data-proxy</module>
    <module>spring-data-proxy-meta</module>
    <module>struts</module>
    <module>telephone-stateful</module>
    <module>testcase-injection</module>
    <module>testing-security-meta</module>
    <module>testing-security</module>
    <module>testing-security-2</module>
    <module>testing-security-3</module>
    <module>testing-security-4</module>
    <module>testing-transactions</module>
    <module>testing-transactions-bmt</module>
    <module>tomee-jersey-eclipselink</module>
    <module>transaction-rollback</module>
    <module>troubleshooting</module>
    <module>webservice-attachments</module>
    <module>webservice-inheritance</module>
    <module>webservice-security</module>
    <module>webservice-ws-security</module>
    <module>webservice-ws-with-resources-config</module>
    <module>webservice-handlerchain</module>
    <module>webservice-holder</module>
    <module>moviefun</module>
    <module>moviefun-rest</module>
  </modules>

  <dependencies>
    <dependency>
      <groupId>org.apache.openjpa</groupId>
      <artifactId>openjpa-maven-plugin</artifactId>
      <version>2.3.0</version>
    </dependency>
  </dependencies>

  <profiles>
    <profile>
      <id>apache-release</id>
      <build>
        <plugins>
          <plugin>
			<groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.3</version>
            <inherited>false</inherited>
            <configuration>
              <descriptors>
                <descriptor>src.xml</descriptor>
              </descriptors>
              <tarLongFileMode>gnu</tarLongFileMode>
              <finalName>openejb-examples-${project.version}</finalName>
            </configuration>
            <executions>
              <execution>
                <id>make-assembly</id>
                <phase>package</phase>
                <goals>
                  <goal>single</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>
