<?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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.oltu</groupId>
    <artifactId>org.apache.oltu.parent</artifactId>
    <version>4</version>
    <relativePath>../parent</relativePath>
  </parent>

  <groupId>org.apache.oltu.oauth2</groupId>
  <artifactId>org.apache.oltu.oauth2.parent</artifactId>
  <version>1.0.2</version>
  <packaging>pom</packaging>

  <name>Apache Oltu - OAuth 2.0</name>

  <scm>
    <connection>scm:svn:https://svn.apache.org/repos/asf/oltu/tags/org.apache.oltu.oauth2.parent-1.0.2</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/oltu/tags/org.apache.oltu.oauth2.parent-1.0.2</developerConnection>
    <url>https://svn.apache.org/repos/asf/oltu/tags/org.apache.oltu.oauth2.parent-1.0.2</url>
  </scm>

  <modules>
    <module>common</module>
    <module>client</module>
    <module>httpclient4</module>
    <module>dynamicreg-client</module>
    <module>dynamicreg-common</module>
    <module>authzserver</module>
    <module>resourceserver</module>
    <module>resourceserver-filter</module>
    <module>dynamicreg-server</module>
    <module>test-utils</module>
    <module>integration-tests</module>
    <module>jwt</module>
  </modules>

  <distributionManagement>
    <site>
      <id>apache.website</id>
      <url>${siteUrlDeployment}</url>
    </site>
  </distributionManagement>
  <ciManagement>
    <system>Jenkins</system>
    <url>https://builds.apache.org/job/Oltu-OAuth-2.0/</url>
    <notifiers>
     <notifier>
       <type>mail</type>
       <sendOnError>true</sendOnError>
       <sendOnFailure>true</sendOnFailure>
       <sendOnSuccess>false</sendOnSuccess>
       <sendOnWarning>false</sendOnWarning>
       <configuration><address>dev@oltu.apache.org</address></configuration>
     </notifier>
   </notifiers>
  </ciManagement>

  <properties>
    <osgi.export>org.apache.oltu.oauth2*;version=${project.version}</osgi.export>
    <cxf.version>2.2.10</cxf.version>
    <org.springframework.version>3.0.3.RELEASE</org.springframework.version>
    <spring-mock.version>2.0.8</spring-mock.version>
    <easy-mock.version>3.0</easy-mock.version>
    <servlet-api.version>2.5</servlet-api.version>
    <jetty.version>7.1.5.v20100705</jetty.version>
    <pmd.version>2.5</pmd.version>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20140107</version>
      </dependency>

      <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.9</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.7</version>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.7</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-mock</artifactId>
      <version>${spring-mock.version}</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.easymock</groupId>
      <artifactId>easymock</artifactId>
      <version>${easy-mock.version}</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>${servlet-api.version}</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <profiles>
    <profile>
      <id>site</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-site-plugin</artifactId>
            <configuration>
              <inputDirectory>${project.reporting.outputDirectory}/apidocs</inputDirectory>
            </configuration>
          </plugin>

          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-scm-publish-plugin</artifactId>
            <configuration>
              <checkoutDirectory>${scmPubCheckoutDirectory}</checkoutDirectory>
              <pubScmUrl>scm:svn:https://svn.apache.org/repos/asf/oltu/site/apidocs/oauth2</pubScmUrl>
              <checkinComment>Oltu OAuth2 apidocs deployment</checkinComment>
              <content>${project.build.directory}/staging</content>
              <tryUpdate>true</tryUpdate>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

</project>
