<?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>8</version>
        <relativePath />
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <groupId>org.apache.fulcrum</groupId>
    <artifactId>fulcrum-quartz</artifactId>
    <version>1.1.3-SNAPSHOT</version>
    <name>Fulcrum Quartz</name>
    <inceptionYear>2004</inceptionYear>
    <description>A wrapper around the Quartz Scheduler.</description>
    <url>https://turbine.apache.org/fulcrum/fulcrum-quartz/</url>

    <!-- Required for staging to work -->
    <distributionManagement>
       <site>
              <id>turbine.apache.org</id>
              <url>https://turbine.apache.org/fulcrum/fulcrum-quartz/</url>
       </site>
    </distributionManagement>

	<scm>
		<connection>scm:svn:http://svn.apache.org/repos/asf/turbine/fulcrum/trunk/quartz/</connection>
		<developerConnection>scm:svn:https://svn.apache.org/repos/asf/turbine/fulcrum/trunk/quartz/</developerConnection>
		<url>http://svn.apache.org/viewvc/turbine/fulcrum/trunk/quartz/</url>
	</scm>

	<developers>
		<developer>
			<name>Scott Eade</name>
			<id>seade</id>
			<email>seade@backstagetech.com.au</email>
			<organization>Backstage Technologies Pty. Ltd.</organization>
			<roles>
				<role>Java Developer</role>
			</roles>
		</developer>
		<developer>
			<name>Siegfried Goeschl</name>
			<id>sgoeschl</id>
			<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>javax.xml.bind</groupId>
		    <artifactId>jaxb-api</artifactId>
		    <version>2.3.1</version>
		</dependency>

		<!-- Service Dependencies -->
		<dependency>
			<groupId>org.apache.avalon.framework</groupId>
			<artifactId>avalon-framework-api</artifactId>
			<version>4.3.1</version>
		</dependency>
    <!-- 2.3.1 fixes https://github.com/quartz-scheduler/quartz/issues/316 , resolve CVE-2019-13990-->
		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz</artifactId>
			<version>2.3.2</version>
		</dependency>
		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz-jobs</artifactId>
			<version>2.3.2</version>
		</dependency>
		<dependency>
			<groupId>javax.transaction</groupId>
			<artifactId>jta</artifactId>
			<version>1.1</version>
			<scope>runtime</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>${basedir}/src/test</directory>
				<includes>
					<include>**/*.*</include>
				</includes>
			</testResource>
		</testResources>
		<plugins>
			<plugin>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<includes>
						<include>**/*Test.*</include>
						<include>**/*TestCase.*</include>
					</includes>
				</configuration>
			</plugin>
		</plugins>



    </build>

  <properties>
    <turbine.site.path>fulcrum/fulcrum-quartz</turbine.site.path>
    <turbine.scmPubCheckoutDirectory>${turbine.site.cache}/fulcrum/quartz</turbine.scmPubCheckoutDirectory>
    <turbine.site.cache>${project.build.directory}/turbine-sites</turbine.site.cache>
    <siteContent.path>${project.build.directory}/staging</siteContent.path><!-- default stagingSiteURL -->
  </properties>

</project>
