<?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>
  <parent>
    <groupId>org.apache.archiva.redback.components</groupId>
    <artifactId>redback-components</artifactId>
    <version>2.1-SNAPSHOT</version>
    <relativePath>../redback-components-parent/pom.xml</relativePath>
  </parent>
  <groupId>org.apache.archiva.redback.components.cache</groupId>
  <artifactId>spring-cache</artifactId>
  <name>Spring Cache Component</name>
  <version>2.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <description>Cache API with various implementations : simple HashMap, ehcache, oscache. Based on Spring container.</description>

  <url>http://archiva.apache.org/redback/components/${project.artifactId}</url>

  <distributionManagement>
    <site>
      <id>apache.website</id>
      <url>file://${user.home}/redback-components-site-deploy/${project.artifactId}</url>
    </site>
  </distributionManagement>

  <scm>
    <connection>scm:svn:http://svn.apache.org/repos/asf/archiva/redback/redback-components/trunk/spring-cache/</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/archiva/redback/redback-components/trunk/spring-cache</developerConnection>
    <url>http://svn.apache.org/viewvc/archiva/redback/redback-components/trunk/spring-cache/</url>
  </scm>

  <modules>
    <module>spring-cache-api</module>
    <module>spring-cache-test</module>
    <module>spring-cache-providers</module>
  </modules>
  <dependencies>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
    </dependency>
  </dependencies>


  <reporting>
    <plugins>
      <plugin>
        <artifactId>maven-javadoc-plugin</artifactId>
        <configuration>
          <aggregate>true</aggregate>
          <!--
          for doclava with javadoc SNAPSHOT version 2.8.1
          <additionnalDependencies>
            <additionnalDependency>
              <groupId>geronimo-spec</groupId>
              <artifactId>geronimo-spec-jta</artifactId>
              <version>1.0.1B-rc4</version>
            </additionnalDependency>
          </additionnalDependencies>
          -->
        </configuration>
      </plugin>
    </plugins>
  </reporting>

</project>
