<?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: 939008 $ $Date: 2010-04-28 09:48:35 -0700 (Wed, 28 Apr 2010) $ -->

<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">

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache.geronimo.genesis.config</groupId>
        <artifactId>project-config</artifactId>
        <version>1.5</version>
    </parent>

    <groupId>org.apache.geronimo.specs</groupId>
    <artifactId>specs-ci</artifactId>
    <packaging>pom</packaging>
    <name>Geronimo Specifications -- CI Setup</name>
    <version>0-SNAPSHOT</version>

    <description>
      This file exists only to make the CI setup easier
    </description>

    <modules>
        <module>geronimo-activation_1.1_spec</module>
        <module>geronimo-annotation_1.0-MR1_spec</module>
        <module>geronimo-annotation_1.0_spec</module>
        <module>geronimo-annotation_1.1_spec</module>
        <module>geronimo-annotation_1.2_spec</module>
        <module>geronimo-atinject_1.0_spec</module>
        <module>geronimo-availability_0.4_spec</module>
        <module>geronimo-availability_1.0_spec</module>
        <module>geronimo-ccpp_1.0_spec</module>
        <module>geronimo-commonj_1.1_spec</module>
        <module>geronimo-concurrent_1.0_spec</module>
        <module>geronimo-ejb_3.0_spec</module>
        <module>geronimo-ejb_3.1_spec-alt</module>
        <module>geronimo-ejb_3.1_spec</module>
        <module>geronimo-ejb_3.2_spec</module>
        <module>geronimo-el_1.0_spec</module>
        <module>geronimo-el_2.2_spec</module>
        <module>geronimo-interceptor_1.1_spec</module>
        <module>geronimo-interceptor_1.2_spec</module>
        <module>geronimo-interceptor_3.0_spec</module>
        <module>geronimo-j2ee-connector_1.6_spec</module>
        <module>geronimo-j2ee-deployment_1.1_spec</module>
        <module>geronimo-j2ee-management_1.1_spec</module>
        <module>geronimo-jacc_1.1_spec</module>
        <module>geronimo-jacc_1.4_spec</module>
        <module>geronimo-jaspic_1.0_spec</module>
        <module>geronimo-javaee-deployment_1.1MR3_spec</module>
        <module>geronimo-javamail_1.4_spec</module>
        <module>geronimo-javamail_1.5_spec</module>
        <module>geronimo-jaxb_2.0_spec</module>
        <module>geronimo-jaxb_2.1_spec</module>
        <module>geronimo-jaxb_2.2_spec</module>
        <module>geronimo-jaxr_1.0_spec</module>
        <module>geronimo-jaxrpc_1.1_spec</module>
        <module>geronimo-jaxrs_1.1_spec</module>
        <module>geronimo-jaxrs_2.0_spec</module>
        <module>geronimo-jaxws_2.1.1_spec</module>
        <module>geronimo-jaxws_2.1_spec</module>
        <module>geronimo-jaxws_2.2_spec</module>
        <module>geronimo-jbatch_1.0_spec</module>
        <module>geronimo-jcache_1.0_spec</module>
        <module>geronimo-jcdi_1.0_spec</module>
        <module>geronimo-jcdi_1.1_spec</module>
        <module>geronimo-jms_1.1_spec</module>
        <module>geronimo-jpa_1.0_spec</module>
        <module>geronimo-jpa_2.0_spec</module>
        <module>geronimo-jpa_2.1_spec</module>
        <module>geronimo-json_1.0_spec</module>
        <module>geronimo-jsp_2.1_spec</module>
        <module>geronimo-jsp_2.2_spec</module>
        <module>geronimo-jta_1.1_spec</module>
        <module>geronimo-jta_1.2_spec</module>
        <module>geronimo-osgi-support</module>
        <module>geronimo-saaj_1.3_spec</module>
        <module>geronimo-servlet_2.5_spec</module>
        <module>geronimo-servlet_3.0_spec</module>
        <module>geronimo-servlet_3.1_spec</module>
        <module>geronimo-stax-api_1.0_spec</module>
        <module>geronimo-stax-api_1.2_spec</module>
        <module>geronimo-validation_1.0_spec</module>
        <module>geronimo-validation_1.1_spec</module>
        <module>geronimo-websockets_1.0_spec</module>
        <module>geronimo-ws-metadata_2.0_spec</module>
    </modules>


  <!--
  This is not a real pom, so we really don't need to maintain it publicly.
  Better to not release it and not have snapshots published of it.
  -->
  <distributionManagement>
    <repository>
      <id>localhost</id>
      <url>file://${basedir}/target/repo/</url>
    </repository>
    <snapshotRepository>
      <id>localhost</id>
      <url>file://${basedir}/target/snapshot-repo/</url>
    </snapshotRepository>
  </distributionManagement>

</project>

