<?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.
-->
<!--+
    | @version $Id$
    +-->
<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>cocoon-blocks-modules</artifactId>
    <groupId>org.apache.cocoon</groupId>
    <version>5</version>
    <relativePath>../../pom.xml</relativePath>    
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <artifactId>cocoon-auth-impl</artifactId>
  <version>1.0.0-RC2</version>
  <packaging>jar</packaging>
  <name>Cocoon Authentication Block Implementation</name>
  <url>http://cocoon.apache.org/${docs.m.auth.relPath}</url>      
  
  <distributionManagement>
    <site>
      <id>website</id>
      <url>${docs.deploymentBaseUrl}/${docs.m.auth.relPath}</url>
    </site>
  </distributionManagement>  
  
  <properties>
    <docs.name>Cocoon Authentication</docs.name>    
    <docs.version>${docs.m.auth.version}</docs.version>
  </properties>
  
  <dependencies>
    <dependency>
      <groupId>org.apache.cocoon</groupId>
      <artifactId>cocoon-core</artifactId>
      <version>2.2.0-RC2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.cocoon</groupId>
      <artifactId>cocoon-auth-api</artifactId>
      <version>1.0.0-RC2</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <scope>provided</scope>
    </dependency>
  </dependencies>
  
  <profiles>
    <profile>
      <id>daisy</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.daisycms</groupId>
            <artifactId>daisy-maven-plugin</artifactId>
            <configuration>        
              <navDocId>1227</navDocId>
              <collection>cdocs-auth</collection>          
              <skipFirstNavigationDocumentLevel>true</skipFirstNavigationDocumentLevel>
            </configuration>
          </plugin>   
        </plugins>
      </build>      
    </profile>
  </profiles>

  <scm>
    <connection>scm:svn:https://svn.apache.org/repos/asf/cocoon/tags/cocoon-2.2/cocoon-auth-impl/cocoon-auth-impl-1.0.0-RC2</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/cocoon/tags/cocoon-2.2/cocoon-auth-impl/cocoon-auth-impl-1.0.0-RC2</developerConnection>
    <url>https://svn.apache.org/repos/asf/cocoon/tags/cocoon-2.2/cocoon-auth-impl/cocoon-auth-impl-1.0.0-RC2</url>
  </scm>
</project>
