<?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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.apache.archiva.redback.components</groupId>
  <artifactId>redback-components-site</artifactId>
  <packaging>pom</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>Apache Archiva Redback Components Site</name>

  <parent>
  	<groupId>org.apache.archiva.redback.components</groupId>
  	<artifactId>redback-components</artifactId>
  	<version>2.5-SNAPSHOT</version>
  </parent>

  <description>Utilities component used by Archiva.</description>
  <url>${webUrl}/site</url>

  <properties>
    <scmPubCheckoutDirectory>.site-content</scmPubCheckoutDirectory>
    <scmTryUpdate>true</scmTryUpdate>
  </properties>

  <distributionManagement>
    <site>
      <id>apache.website</id>
      <url>${siteUrl}/</url>
    </site>
  </distributionManagement>

  <modules>
    <module>../spring-cache</module>
    <module>../expression-evaluator</module>
    <module>../spring-quartz</module>
    <module>../spring-registry</module>
    <module>../spring-taskqueue</module>
    <module>../spring-apacheds</module>
    <module>../spring-utils</module>
    <module>../redback-features</module>
    <module>../modello-plugins</module>
  </modules>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-deploy-plugin</artifactId>
        <inherited>false</inherited>
        <configuration>
          <skip>true</skip>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-scm-publish-plugin</artifactId>
        <configuration>
          <checkinComment>Apache Redback Components site deployment</checkinComment>
          <tryUpdate>${scmTryUpdate}</tryUpdate>
          <content>${project.build.directory}/staging</content>
          <pubScmUrl>${siteUrl}</pubScmUrl>
          <ignorePathsToDelete>
            <ignorePathToDelete>expression-evaluator**</ignorePathToDelete>
            <ignorePathToDelete>modello-plugins**</ignorePathToDelete>
            <ignorePathToDelete>redback-components**</ignorePathToDelete>
            <ignorePathToDelete>redback-features**</ignorePathToDelete>
            <ignorePathToDelete>spring-apacheds**</ignorePathToDelete>
            <ignorePathToDelete>spring-cache**</ignorePathToDelete>
            <ignorePathToDelete>spring-jdo2**</ignorePathToDelete>
            <ignorePathToDelete>spring-quartz**</ignorePathToDelete>
            <ignorePathToDelete>spring-registry**</ignorePathToDelete>
            <ignorePathToDelete>spring-taskqueue**</ignorePathToDelete>
            <ignorePathToDelete>spring-utils**</ignorePathToDelete>
          </ignorePathsToDelete>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <repositories>
    <repository>
      <id>archiva.snapshots</id>
      <name>Archiva VM Snapshots Repository</name>
      <url>https://archiva-repository.apache.org/archiva/repository/snapshots</url>
      <releases>
        <enabled>false</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>

  </repositories>

  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-project-info-reports-plugin</artifactId>
        <version>${maven-project-info-reports-plugin.version}</version>
      </plugin>
    </plugins>
  </reporting>
</project>
