<?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.
-->

<!-- $Rev$ $Date$ -->

<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>assembly</artifactId>
    <groupId>org.apache.openejb</groupId>
    <version>3.0-beta-1</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <artifactId>openejb-standalone</artifactId>
  <packaging>pom</packaging>
  <name>OpenEJB :: Assembly :: Standalone</name>
  <build>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
    <plugins>
      <!--
      Create an empty directory which will be copied
      twice by the assembly plugin to create the
      conf/ and logs/ directories
      -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <id>create-empty-directory</id>
            <phase>process-classes</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <tasks>
                <mkdir dir="${basedir}/target/classes/empty" />
              </tasks>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.2</version>
        <executions>
          <execution>
            <id>filter-resources</id>
            <phase>package</phase>
            <goals>
              <goal>resources</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.1</version>
        <executions>
          <execution>
            <id>assembly-bin-distributions</id>
            <phase>package</phase>
            <goals>
              <goal>attached</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <descriptors>
            <descriptor>src/main/assembly/bin.xml</descriptor>
            <!-- Creates some bizarre file -->
            <!-- descriptor>src/main/assembly/test.xml</descriptor -->
          </descriptors>
          <archive>
            <manifest>
              <mainClass>org.apache.openejb.test.Main</mainClass>
            </manifest>
          </archive>
          <finalName>openejb-${pom.version}</finalName>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.1</version>
        <executions>
          <execution>
            <id>cleanup-target</id>
            <phase>package</phase>
            <configuration>
              <tasks>
                <delete dir='${basedir}/target/classes' />
                <delete dir='${basedir}/target/archive-tmp' />
              </tasks>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <dependency>
      <groupId>org.apache.openejb</groupId>
      <artifactId>openejb-loader</artifactId>
      <version>${version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.openejb</groupId>
      <artifactId>openejb-core</artifactId>
      <version>${version}</version>
      <exclusions>
        <exclusion>
          <groupId>org.apache.geronimo.modules</groupId>
          <artifactId>geronimo-kernel</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.apache.geronimo.modules</groupId>
          <artifactId>geronimo-webservices</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.apache.geronimo.modules</groupId>
          <artifactId>geronimo-naming</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.apache.geronimo.modules</groupId>
          <artifactId>geronimo-timer</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.apache.geronimo.modules</groupId>
          <artifactId>geronimo-security</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-j2ee-connector_1.5_spec</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.geronimo.javamail</groupId>
      <artifactId>geronimo-javamail_1.4_mail</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-jaxr_1.0_spec</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-saaj_1.1_spec</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.openejb</groupId>
      <artifactId>openejb-client</artifactId>
      <version>${version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.openejb</groupId>
      <artifactId>openejb-server</artifactId>
      <version>${version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.openejb</groupId>
      <artifactId>openejb-ejbd</artifactId>
      <version>${version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.openejb</groupId>
      <artifactId>openejb-hsql</artifactId>
      <version>${version}</version>
    </dependency>
    <!--<dependency>-->
    <!--<groupId>org.apache.openejb</groupId>-->
    <!--<artifactId>openejb-activemq</artifactId>-->
    <!--<version>${version}</version>-->
    <!--</dependency>-->
    <dependency>
      <groupId>org.apache.derby</groupId>
      <artifactId>derby</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.openejb</groupId>
      <artifactId>openejb-http</artifactId>
      <version>${version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.openejb</groupId>
      <artifactId>openejb-telnet</artifactId>
      <version>${version}</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.openejb</groupId>
      <artifactId>openejb-itests-client</artifactId>
      <version>${version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.openejb</groupId>
      <artifactId>openejb-itests-beans</artifactId>
      <version>${version}</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <profiles>
    <profile>
      <id>itest</id>
      <properties>
        <openejb.debug.suspend>n</openejb.debug.suspend>
      </properties>
      <dependencies>
        <dependency>
          <groupId>org.apache.openejb</groupId>
          <artifactId>openejb-itests-client</artifactId>
          <version>${version}</version>
        </dependency>
        <dependency>
          <groupId>org.apache.openejb</groupId>
          <artifactId>openejb-itests-beans</artifactId>
          <version>${version}</version>
        </dependency>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <scope>runtime</scope>
        </dependency>
      </dependencies>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
              <execution>
                <id>setup:openejb:unjar</id>
                <phase>integration-test</phase>
                <goals>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <tasks>
                    <property name="targetDir" value="${basedir}/target/" />
                    <property name="openejb.home" value="${targetDir}/openejb-${pom.version}" />
                    <property name="openejb.dist" value="${targetDir}/openejb-${pom.version}-bin.zip" />

                    <unjar src="${openejb.dist}" dest="${targetDir}" />
                  </tasks>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
              <execution>
                <id>setup:openejb:copy</id>
                <phase>integration-test</phase>
                <goals>
                  <goal>copy</goal>
                </goals>
                <configuration>
                  <artifactItems>
                    <artifactItem>
                      <groupId>org.apache.openejb</groupId>
                      <artifactId>openejb-itests-beans</artifactId>
                      <version>${version}</version>
                      <type>jar</type>
                      <outputDirectory>${basedir}/target/openejb-${pom.version}/beans</outputDirectory>
                    </artifactItem>
                  </artifactItems>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>test:local</id>
                <phase>integration-test</phase>
                <goals>
                  <goal>exec</goal>
                </goals>
                <configuration>
                  <executable>java</executable>
                  <workingDirectory>${project.build.directory}</workingDirectory>
                  <arguments>
                    <argument>-Dopenejb.home=openejb-${pom.version}</argument>
                    <argument>-classpath</argument>
                    <classpath />
                    <argument>-agentlib:jdwp=transport=dt_socket,server=y,suspend=${openejb.debug.suspend},address=5005</argument>
                    <argument>org.apache.openejb.test.Main</argument>
                    <argument>local</argument>
                  </arguments>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>
