<?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>
    	<relativePath>../parent/pom.xml</relativePath>
  </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>
