<?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.
  -->
<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-parent</artifactId>
    <version>21</version>
  </parent>

  <groupId>org.apache.apache.resources</groupId>
  <artifactId>apache-resource-bundles-aggregator</artifactId>
  <version>1-SNAPSHOT</version>
  <packaging>pom</packaging>
  <url>${siteUrl}</url>

  <name>Apache Maven Resource Bundles</name>
  <inceptionYear>2012</inceptionYear>

  <properties>
    <apache-jar-resource-bundle-version>1.4</apache-jar-resource-bundle-version>
    <apache-jar-txt-resource-bundle-version>1.5-SNAPSHOT</apache-jar-txt-resource-bundle-version>
    <apache-incubator-disclaimer-resource-bundle-version>1.2-SNAPSHOT</apache-incubator-disclaimer-resource-bundle-version>
    <apache-source-release-assembly-descriptor-version>1.0.3</apache-source-release-assembly-descriptor-version>
    <siteDeployUrl>scp://people.apache.org/www/maven.apache.org/apache-resource-bundles</siteDeployUrl>
    <siteDeployId>apache.website</siteDeployId>
    <siteUrl>http://maven.apache.org/apache-resource-bundles</siteUrl>
  </properties>


  <modules>
    <module>apache-resource-bundles</module>
    <module>apache-jar-resource-bundle</module>
    <module>apache-jar-txt-resource-bundle</module>
    <module>apache-license-header-resource-bundle</module>
    <module>apache-incubator-disclaimer-resource-bundle</module>         
    <module>apache-source-release-assembly-descriptor</module>
    <module>resources-bundles-sample</module>
  </modules>

  <distributionManagement>
    <site>
      <id>${siteDeployId}</id>
      <url>${siteDeployUrl}</url>
    </site>
  </distributionManagement>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-deploy-plugin</artifactId>
        <version>2.6</version>
        <inherited>false</inherited>
        <configuration>
          <skip>true</skip>
        </configuration>

      </plugin>
    </plugins>
  </build>

</project>