<?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">
  <parent>
    <groupId>org.apache.turbine</groupId>
    <artifactId>turbine-parent</artifactId>
    <version>9-SNAPSHOT</version>
    <relativePath />
  </parent>

  <modelVersion>4.0.0</modelVersion>
  <groupId>org.apache.fulcrum</groupId>
  <artifactId>fulcrum-cache</artifactId>
  <version>2.0.1-SNAPSHOT</version>
  <name>Fulcrum Cache</name>
  <inceptionYear>2004</inceptionYear>
  <description>Fulcrum Cache Service</description>
  <url>http://turbine.apache.org/fulcrum/fulcrum-cache</url>
  
  <!-- Required for staging to work -->
  <distributionManagement>
    <site>
         <id>apache.org</id>
         <!-- scmPubUrl should be different for each project. If not defined scmPubUrl uses default value ${project.distributionManagement.site.url} -->
         <url>scm:git:${turbine.scmPubUrl}</url>
    </site>
  </distributionManagement>
        
  <scm>
    <connection>scm:git:https://gitbox.apache.org/repos/asf/turbine-fulcrum-cache.git</connection>
    <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/turbine-fulcrum-cache.git</developerConnection>
    <url>https://gitbox.apache.org/repos/asf/turbine-fulcrum-cache.git</url>
  </scm>

  <developers>
    <developer>
      <name>Siegfried Goeschl</name>
      <id>sgoeschl</id>
      <email>sgoeschl@apache.org</email>
      <organization />
      <roles>
        <role>Java Developer</role>
      </roles>
    </developer>
    <developer>
      <name>Thomas Vandahl</name>
      <id>tv</id>
      <email>tv@apache.org</email>
      <organization />
      <roles>
        <role>Java Developer</role>
      </roles>
    </developer>    
  </developers>

  <dependencies>
    <dependency>
      <groupId>org.apache.avalon.framework</groupId>
      <artifactId>avalon-framework-api</artifactId>
      <version>4.3.1</version>
    </dependency>
    <dependency>
        <groupId>net.sf.ehcache</groupId>
        <artifactId>ehcache</artifactId>
        <version>2.10.9.2</version>
    </dependency>
    <!-- ehcache has api slf4j incldued -->
     <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.30</version>
        <scope>test</scope>
    </dependency>
     <!--dependency>
      <groupId>org.ehcache</groupId>
      <artifactId>ehcache</artifactId>
      <version>3.9.2</version>
      <scope>optional</scope>
    </dependency-->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-jcs3-core</artifactId>
        <version>3.0</version>
    </dependency>
    <!-- log optional for jcs3, required log4j2.xml and system property -Djcs.logSystem=log4j2  -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>${turbine.log4j2.version}</version>
        <scope>test</scope>
    </dependency>
    <!-- testing dependencies -->
    <dependency>
      <groupId>org.apache.fulcrum</groupId>
      <artifactId>fulcrum-testcontainer</artifactId>
      <version>1.0.9</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.fulcrum</groupId>
      <artifactId>fulcrum-yaafi</artifactId>
      <version>1.0.8</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <sourceDirectory>${basedir}/src/java</sourceDirectory>
    <testSourceDirectory>${basedir}/src/test</testSourceDirectory>
    
    <testResources>
        <testResource>
            <directory>src/test</directory>
                <includes> 
                 <include>**/*.xml</include> 
                 <include>**/*.ccf</include>
                  <include>**/*.properties</include>
               </includes>
        </testResource>
    </testResources>
  
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <excludedGroups>LongRunning</excludedGroups>
          <additionalClasspathElements>
            <additionalClasspathElement>${basedir}/src/test</additionalClasspathElement>
          </additionalClasspathElements>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <properties>
    <turbine.site.path>turbine-fulcrum-cache</turbine.site.path>
    <turbine.scmPubCheckoutDirectory>${turbine.site.cache}/fulcrum/cache</turbine.scmPubCheckoutDirectory>
  </properties>

    
</project>
