<!--
  ~ 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>continuum-parent</artifactId>
    <groupId>org.apache.maven.continuum</groupId>
    <version>1.1-beta-1</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <artifactId>continuum-plexus-runtime</artifactId>
  <name>Continuum Plexus Runtime</name>
  <dependencies>
    <dependency>
      <groupId>org.apache.derby</groupId>
      <artifactId>derby</artifactId>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.codehaus.plexus</groupId>
      <artifactId>plexus-utils</artifactId>
    </dependency>
    <dependency>
      <groupId>org.codehaus.plexus</groupId>
      <artifactId>plexus-appserver-host</artifactId>
      <version>2.0-alpha-8</version>
    </dependency>
    <!-- Services -->
    <dependency>
      <groupId>org.codehaus.plexus</groupId>
      <artifactId>plexus-appserver-service-jetty</artifactId>
      <version>2.0-alpha-8</version>
      <type>plexus-service</type>
    </dependency>
    <!-- Plexus applications -->
    <dependency>
      <groupId>org.apache.maven.continuum</groupId>
      <artifactId>continuum-plexus-application</artifactId>
      <version>${pom.version}</version>
      <type>plexus-application</type>
    </dependency>

    <!-- Additional Core Artifacts -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.8</version>
    </dependency>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging-api</artifactId>
      <version>1.0.4</version>
    </dependency>
    <dependency>
      <groupId>org.codehaus.plexus</groupId>
      <artifactId>plexus-naming</artifactId>
      <version>1.0-alpha-2</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>jpox</groupId>
      <artifactId>jpox</artifactId>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>javax.mail</groupId>
      <artifactId>mail</artifactId>
      <version>1.4</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.codehaus.plexus</groupId>
      <artifactId>plexus-contextualizer</artifactId>
      <version>1.0-alpha-1</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.plexus</groupId>
        <artifactId>plexus-appserver-maven-plugin</artifactId>
        <version>2.0-alpha-8</version>
        <extensions>true</extensions>
        <executions>
          <execution>
            <phase>process-resources</phase>
            <goals>
              <goal>assemble-runtime</goal>
              <goal>add-services</goal>
              <goal>add-apps</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <runtimeConfiguration>src/conf/plexus.xml</runtimeConfiguration>
          <runtimeConfigurationProperties>src/plexus.properties</runtimeConfigurationProperties>
          <runtimePath>target/plexus-continuum-runtime</runtimePath>
          <additionalCoreArtifacts>
            <additionalCoreArtifact>commons-logging:commons-logging-api</additionalCoreArtifact>
            <additionalCoreArtifact>log4j:log4j</additionalCoreArtifact>
            <additionalCoreArtifact>org.apache.derby:derby</additionalCoreArtifact>
            <additionalCoreArtifact>org.codehaus.plexus:plexus-naming</additionalCoreArtifact>
            <additionalCoreArtifact>commons-pool:commons-pool</additionalCoreArtifact>
            <additionalCoreArtifact>commons-dbcp:commons-dbcp</additionalCoreArtifact>
            <additionalCoreArtifact>commons-collections:commons-collections</additionalCoreArtifact>
            <additionalCoreArtifact>directory-naming:naming-core</additionalCoreArtifact>
            <additionalCoreArtifact>directory-naming:naming-factory</additionalCoreArtifact>
            <additionalCoreArtifact>directory-naming:naming-java</additionalCoreArtifact>
            <additionalCoreArtifact>javax.mail:mail</additionalCoreArtifact>
            <additionalCoreArtifact>javax.activation:activation</additionalCoreArtifact>

            <!-- Not required in core, just sharing to reduce size -->
            <additionalCoreArtifact>jpox:jpox</additionalCoreArtifact>
            <additionalCoreArtifact>javax.resource:connector</additionalCoreArtifact>
            <additionalCoreArtifact>javax.jdo:jdo2-api</additionalCoreArtifact>
            <additionalCoreArtifact>org.codehaus.plexus:plexus-contextualizer</additionalCoreArtifact>
          </additionalCoreArtifacts>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.1</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <descriptor>src/main/assembly/bin.xml</descriptor>
          <finalName>continuum-${version}</finalName>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <id>config</id>
            <phase>process-resources</phase>
            <configuration>
              <tasks>
                <copy todir="target/plexus-continuum-runtime/conf">
                  <fileset dir="src/main/appserver/conf" />
                </copy>
              </tasks>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
