<?xml version="1.0" encoding="UTF-8" standalone="no"?><!--

 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">
   <modelVersion>4.0.0</modelVersion>
   <parent>
        <groupId>org.apache.clerezza</groupId>
        <artifactId>clerezza</artifactId>
        <version>0.5</version>
        <relativePath>../parent</relativePath>
   </parent>
   <groupId>org.apache.clerezza</groupId>
   <artifactId>ssl.keygen</artifactId>
   <packaging>pom</packaging>
   <version>1.0.0-SNAPSHOT</version>
   <name>Clerezza - FOAF+SSL Keygen Lib :: Creating WebIDs in one Click</name>
   <url>http://www.rcs.manchester.ac.uk/</url>

   <licenses>
      <license>
         <name>BSD</name>
         <url>LICENSE.txt</url>
         <distribution>repo</distribution>
      </license>
   </licenses>

   <modules>
      <module>base</module>
      <!-- The sameplewebapp is just here as an example code for jsp based webapps on 
       how to use keygen -->
      <!--module>samplewebapp</module-->
   </modules>

   <build>
      <plugins>
         <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
               <source>1.6</source>
               <target>1.6</target>
            </configuration>
         </plugin>
      </plugins>
   </build>

   <reporting>
      <plugins>
         <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>findbugs-maven-plugin</artifactId>
            <version>1.2</version>
            <configuration>
               <findbugsXmlOutput>true</findbugsXmlOutput>
               <findbugsXmlWithMessages>true</findbugsXmlWithMessages>
               <xmlOutput>true</xmlOutput>
            </configuration>
         </plugin>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-checkstyle-plugin</artifactId>
            <version>2.3</version>
         </plugin>
      </plugins>
   </reporting>

   <dependencyManagement>
      <dependencies>
         <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
         </dependency>
         <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
         </dependency>
         <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk16</artifactId>
            <version>1.45</version>
         </dependency>
         <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
         </dependency>
         <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
            <scope>test</scope>
         </dependency>
      </dependencies>
   </dependencyManagement>

   <developers>
      <developer>
         <id>bruno.harbulot</id>
         <name>Bruno Harbulot</name>
         <email>Bruno.Harbulot@manchester.ac.uk</email>
         <organization>The University of Manchester</organization>
         <organizationUrl>http://www.manchester.ac.uk/</organizationUrl>
         <roles>
            <role>architect</role>
            <role>developer</role>
         </roles>
         <timezone>0</timezone>
      </developer>
      <developer>
         <id>http://bblfish.net/#hjs</id>
         <name>Henry Story</name>
         <email>Henry.Story@bblfish.net</email>
         <organization>Self Employed</organization>
         <organizationUrl>http://bblfish.net/</organizationUrl>
         <roles>
            <role>architect</role>
            <role>developer</role>
         </roles>
         <timezone>0</timezone>
      </developer>
   </developers>
   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
</project>