<?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-annotation_1.3_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-jcdi_2.0_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-json_1.1_spec</module>
        <module>geronimo-jsonb_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>

