<?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.fulcrum</groupId>
    <artifactId>fulcrum-parent</artifactId>
    <version>1</version>
  </parent>

  <modelVersion>4.0.0</modelVersion>
  <artifactId>fulcrum-parser</artifactId>
  <version>1.0.2</version>
  <name>Fulcrum Parser</name>
  <inceptionYear>2005</inceptionYear>
  <description>Fulcrum Parser Service</description>
  <url>http://turbine.apache.org/fulcrum/fulcrum-parser</url>
		
  <scm>
    <connection>scm:svn:http://svn.apache.org/repos/asf/turbine/fulcrum/tags/FULCRUM_PARSER_1_0_2</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/turbine/fulcrum/tags/FULCRUM_PARSER_1_0_2</developerConnection>
    <url>http://svn.apache.org/viewcvs/turbine/fulcrum/tags/FULCRUM_PARSER_1_0_2</url>
  </scm>

  <distributionManagement>
    <site>
      <id>apache.website</id>
      <name>Fulcrum Website</name>
      <url>${fulcrum.deployment.protocol}://people.apache.org/www/turbine.apache.org/fulcrum/fulcrum-parser/</url>
    </site>    
  </distributionManagement>
	
  <developers>
    <developer>
      <name>Eric Pugh</name>
      <id>epugh</id>
      <email>epugh@upstate.com</email>
    </developer>  
    <developer>
      <name>Henning P. Schmiedehausen</name>
      <id>henning</id>
      <email>hps@intermeta.de</email>
      <organization>INTERMETA - Gesellschaft fuer Mehrwertdienste mbH</organization>
      <roles>
        <role>Java Developer</role>
      </roles>      
    </developer>  
    <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>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.4</version>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>commons-collections</groupId>
      <artifactId>commons-collections</artifactId>
      <version>3.2</version>
    </dependency>
    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
      <version>2.4</version>
    </dependency>
    <dependency>
      <groupId>org.apache.fulcrum</groupId>
      <artifactId>fulcrum-upload</artifactId>
      <version>1.0.4</version>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.apache.fulcrum</groupId>
      <artifactId>fulcrum-pool</artifactId>
      <version>1.0.4</version>
    </dependency>

    <!-- testing dependencies -->
    <dependency>
      <groupId>org.apache.fulcrum</groupId>
      <artifactId>fulcrum-testcontainer</artifactId>
      <version>1.0.6</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.fulcrum</groupId>
      <artifactId>fulcrum-yaafi</artifactId>
      <version>1.0.6</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

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

  <profiles>
    <profile>
      <id>rc</id>
      <distributionManagement>
        <!-- Cannot define in parent ATM, see COMMONSSITE-26 -->
        <site>
          <id>apache.website</id>
          <name>Apache Fulcrum Release Candidate Staging Site</name>
          <url>${fulcrum.deployment.protocol}://people.apache.org/www/turbine.apache.org/builds/fulcrum/${fulcrum.componentid}/${fulcrum.release.version}/${fulcrum.rc.version}/site</url>
        </site>
      </distributionManagement>
    </profile>
  </profiles>
  
  <properties>
    <!-- This bits are used for the staging directory -->
    <fulcrum.release.version>1.0.2</fulcrum.release.version>
    <fulcrum.rc.version>RC1</fulcrum.rc.version>  
    <fulcrum.deployment.protocol>scpexe</fulcrum.deployment.protocol>
  </properties>  
	
</project>