<?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: 1624046 $ $Date: 2014-09-10 18:01:13 +0200 (Wed, 10 Sep 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>4.7.1</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>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-query</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>
