<?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>
		<artifactId>turbine-parent</artifactId>
		<groupId>org.apache.turbine</groupId>
		<version>13-SNAPSHOT</version>
	</parent>

	<modelVersion>4.0.0</modelVersion>
	<groupId>org.apache.fulcrum</groupId>
	<artifactId>fulcrum-yaafi</artifactId>
	<version>2.0.1-SNAPSHOT</version>
	<name>Fulcrum YAAFI</name>
	<inceptionYear>2004</inceptionYear>
	<description>A light-weight Avalon container</description>
	<url>http://turbine.apache.org/fulcrum/fulcrum-yaafi</url>

	 <!-- distributionManagement id and url defined in parent, adapt turbine.site.path -->

	<scm>
		<connection>scm:git:https://gitbox.apache.org/repos/asf/turbine-fulcrum-yaafi.git</connection>
		<developerConnection>scm:git:https://gitbox.apache.org/repos/asf/turbine-fulcrum-yaafi.git</developerConnection>
        <url>https://github.com/apache/${turbine.site.path}/tree/${project.scm.tag}</url>
        <tag>fulcrum-yaafi-2.0.0</tag>
	</scm>

	<developers>
		<developer>
			<name>Jeffery Painter</name>
			<id>painter</id>
			<email>painter@apache.org</email>
			<organization>Apache</organization>
			<roles>
				<role>Java Developer</role>
			</roles>
		</developer>
		<developer>
			<name>Siegfried Goeschl</name>
			<id>sgoeschl</id>
			<email>sgoeschl@apache.org</email>
			<organization>Apache</organization>
			<roles>
				<role>Java Developer</role>
			</roles>
		</developer>
	</developers>

	<dependencies>

		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.14.0</version>
		</dependency>
		<dependency>
		    <groupId>commons-io</groupId>
		    <artifactId>commons-io</artifactId>
		    <version>2.15.0</version>
		</dependency>
		
		<!--  use own Log4jLogger avalon adapter and replace other in turbine and testcontainer in upcoming releases -->
		<dependency>
          <groupId>org.apache.logging.log4j</groupId>
          <artifactId>log4j-api</artifactId>
          <version>${turbine.log4j2.version}</version>
        </dependency>
		
		<!-- Avalon depedencies -->
		<dependency>
			<groupId>org.apache.avalon.framework</groupId>
			<artifactId>avalon-framework-api</artifactId>
			<version>4.3.1</version>
		</dependency>
		<dependency>
			<groupId>org.apache.avalon.framework</groupId>
			<artifactId>avalon-framework-impl</artifactId>
			<version>4.3.1</version>
		</dependency>
		<!-- Optional decrytpion of configuration files -->
		<dependency>
			<groupId>org.apache.fulcrum</groupId>
			<artifactId>fulcrum-yaafi-crypto</artifactId>
			<version>2.0.1</version>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>com.jamonapi</groupId>
			<artifactId>jamon</artifactId>
			<version>2.82</version>
			<optional>true</optional>
			<exclusions>
				<exclusion>
					<groupId>com.hazelcast</groupId>
					<artifactId>hazelcast-all</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.javasimon</groupId>
			<artifactId>javasimon-core</artifactId>
			<version>4.2.0</version>
			<optional>true</optional>
		</dependency>
		<!-- Testing dependencies -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.13.2</version>
            <scope>test</scope>
		</dependency>
        <dependency>
             <groupId>org.apache.fulcrum</groupId>
             <artifactId>fulcrum-testcontainer</artifactId>
             <version>2.0.0</version>
             <scope>test</scope>
        </dependency>
        <!-- log4j2 only usable in testcontainer 1.0.10 -->
        <dependency>
           <groupId>org.apache.logging.log4j</groupId>
           <artifactId>log4j-core</artifactId>
           <version>${turbine.log4j2.version}</version>
           <scope>test</scope>
        </dependency>
	</dependencies>

	<build>
		<sourceDirectory>${basedir}/src/java</sourceDirectory>
		<testSourceDirectory>${basedir}/src/test</testSourceDirectory>
	</build>

	<properties>
		<turbine.site.path>turbine-fulcrum-yaafi</turbine.site.path>
		<turbine.scmPubCheckoutDirectory>${turbine.site.cache}/fulcrum/yaafi</turbine.scmPubCheckoutDirectory>
		<turbine.site.cache>${project.build.directory}/turbine-sites</turbine.site.cache>
	</properties>
</project>
