<?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>

  <groupId>org.apache.creadur.whisker</groupId>
  <artifactId>apache-whisker</artifactId>
  <version>0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <dependencies/>

  <parent>
    <groupId>org.apache</groupId>
    <artifactId>apache</artifactId>
    <version>10</version>
  </parent>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.apache.velocity</groupId>
        <artifactId>velocity</artifactId>
        <version>1.7</version>
      </dependency>

      <dependency>
        <groupId>org.jdom</groupId>
        <artifactId>jdom</artifactId>
        <version>1.1</version>
      </dependency>

      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.0</version>
      </dependency>

      <dependency>
        <groupId>commons-cli</groupId>
        <artifactId>commons-cli</artifactId>
        <version>1.2</version>
      </dependency>
  
      <dependency>
          <groupId>commons-io</groupId>
          <artifactId>commons-io</artifactId>
          <version>2.1</version>
      </dependency>

      <dependency>
          <groupId>commons-logging</groupId>
          <artifactId>commons-logging-api</artifactId>
          <version>1.1</version>
      </dependency>

      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.jmock</groupId>
        <artifactId>jmock-junit3</artifactId>
        <version>2.5.1</version>
        <scope>test</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <modules>
    <module>apache-whisker-model</module>
    <module>apache-whisker-scan</module>
    <module>apache-whisker-xml</module>
    <module>apache-whisker-app</module>
    <module>apache-whisker-velocity</module>
    <module>apache-whisker-cli</module>
    <module>apache-whisker-plugin4maven</module>
  </modules>


  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <target.jdk>1.5</target.jdk>
    <junit.version>3.8.1</junit.version>
<!-- 
    Custom distributions
    ====================
    override these values. You might do this by adding a profile to your local settings.xml.
     -->
    <whisker.site.url>file:stage</whisker.site.url>
    <whisker.site.name>Whisker Website</whisker.site.name>
    <whisker.site.id>org.apache.creadur.whisker.site</whisker.site.id>   
  </properties>

  <!-- ================================ Build information -->
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <source>${target.jdk}</source>
            <target>${target.jdk}</target>
          </configuration>
        </plugin>
        <plugin>
	        <groupId>org.apache.maven.plugins</groupId>
	        <artifactId>maven-site-plugin</artifactId>
	        <version>3.1</version>
	        <configuration>
	          <outputEncoding>${project.build.sourceEncoding}</outputEncoding>
	          <inputEncoding>${project.build.sourceEncoding}</inputEncoding>
	          <relativizeDecorationLinks>false</relativizeDecorationLinks>
	          <!-- reporting plugins are configured according to new mvn3 standard -->
              <!-- Until Maven finds a way to allow inheritance, duplicated in plugin4maven -->
	          <reportPlugins>
	            <plugin>
	              <groupId>org.apache.maven.plugins</groupId>
	              <artifactId>maven-checkstyle-plugin</artifactId>
	              <version>2.9.1</version>
	            </plugin>
	            <plugin>
	              <groupId>org.apache.maven.plugins</groupId>
	              <artifactId>maven-javadoc-plugin</artifactId>
	              <version>2.8.1</version>
	            </plugin>
	            <plugin>
	              <groupId>org.apache.maven.plugins</groupId>
	              <artifactId>maven-jxr-plugin</artifactId>
	              <version>2.3</version>
	              <configuration>
	                <aggregate>true</aggregate>
	                <linkJavadoc>true</linkJavadoc>
	              </configuration>
	            </plugin>
	            <plugin>
	              <groupId>org.apache.maven.plugins</groupId>
	              <artifactId>maven-surefire-report-plugin</artifactId>
	              <version>2.12</version>
	            </plugin>
	            <plugin>
	              <artifactId>maven-pmd-plugin</artifactId>
	              <version>2.7.1</version>
	              <configuration>
	                <linkXRef>true</linkXRef>
	                <sourceEncoding>utf-8</sourceEncoding>
	                <minimumTokens>100</minimumTokens>
	                <targetJdk>${target.jdk}</targetJdk>
	                <excludes>
	                  <exclude>**/generated/**/*.java</exclude>
	                  <exclude>**/target/clover/**/*.java</exclude>
	                </excludes>
	              </configuration>
	            </plugin>
	            <!-- read changes.xml -->
	            <plugin>
	              <groupId>org.apache.maven.plugins</groupId>
	              <artifactId>maven-changes-plugin</artifactId>
	              <version>2.7.1</version>
	              <reportSets>
	                <reportSet>
	                  <reports>
	                    <report>changes-report</report>
	                  </reports>
	                </reportSet>
	              </reportSets>
	            </plugin>
	            <!-- jdepend plugin -->
	            <plugin>
	              <groupId>org.codehaus.mojo</groupId>
	              <artifactId>jdepend-maven-plugin</artifactId>
	              <version>2.0-beta-2</version>
	            </plugin>
	            <!-- cobertura plugin -->
	            <plugin>
	              <groupId>org.codehaus.mojo</groupId>
	              <artifactId>cobertura-maven-plugin</artifactId>
	              <version>2.5.1</version>
	            </plugin>
	            <!-- catch code tags -->
	            <plugin>
	              <groupId>org.codehaus.mojo</groupId>
	              <artifactId>taglist-maven-plugin</artifactId>
	              <version>2.4</version>
	              <configuration>
	                <tags>
	                  <tag>TODO</tag>
	                  <tag>todo</tag>
	                  <tag>FIXME</tag>
	                  <tag>fixme</tag>
	                  <tag>REFACTOR</tag>
	                  <tag>refactor</tag>
	                  <tag>REVIEW</tag>
	                  <tag>review</tag>
	                  <tag>@todo</tag>
	                  <tag>@deprecated</tag>
	                </tags>
	              </configuration>
	            </plugin>
	            <plugin>
	              <groupId>org.codehaus.mojo</groupId>
	              <artifactId>findbugs-maven-plugin</artifactId>
	              <version>2.5</version>
	            </plugin>
	            <plugin>
	              <groupId>org.apache.maven.plugins</groupId>
	              <artifactId>maven-project-info-reports-plugin</artifactId>
	              <version>2.4</version>
	            </plugin>
	  
	          </reportPlugins>
	        </configuration>
	      </plugin>
	      <!-- instrumentalization for cobertura -->
	      <plugin>
	        <groupId>org.codehaus.mojo</groupId>
	        <artifactId>cobertura-maven-plugin</artifactId>
	        <version>2.5.1</version>
	        <executions>
	          <execution>
	            <goals>
	              <goal>clean</goal>
	            </goals>
	          </execution>
	        </executions>
	      </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
    </plugins>
  </build>
  
  <!-- ================================ Project information -->
  
  <name>Apache Whisker</name>
  <description>Apache Whisker wrangles legal documentation for composed applications.</description>
  <url>http://creadur.apache.org/whisker/</url>
  <inceptionYear>2011</inceptionYear>
  
  <licenses>
    <license>
      <name>Apache License, Version 2</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
      <comments>An OSI approved open source license.</comments>
    </license>
  </licenses>
  <organization>
    <name>Apache Software Foundation</name>
    <url>http://www.apache.org</url>
  </organization>

  <!-- ================================ Environment -->
  <prerequisites>
    <maven>3.0.2</maven>
  </prerequisites>

  <issueManagement>
    <system>JIRA</system>
    <url>https://issues.apache.org/jira/browse/WHISKER</url>
  </issueManagement>

  <mailingLists>
    <mailingList>
      <name>Whisker development at Apache Creadur project</name>
      <subscribe>dev-subscribe@creadur.apache.org</subscribe>
      <unsubscribe>dev-unsubscribe@creadur.apache.org</unsubscribe>
      <post>dev@creadur.apache.org</post>
      <archive>http://mail-archives.apache.org/mod_mbox/creadur-dev/</archive>
    </mailingList>
    <mailingList>
      <name>Whisker commits at Apache Creadur project</name>
      <subscribe>commits-subscribe@creadur.apache.org</subscribe>
      <unsubscribe>commits-unsubscribe@creadur.apache.org</unsubscribe>
      <archive>http://mail-archives.apache.org/mod_mbox/creadur-commits/</archive>
    </mailingList>
  </mailingLists>

  <distributionManagement>
    <site>
        <id>${whisker.site.id}</id>
        <name>${whisker.site.name}</name>
        <url>${whisker.site.url}</url>
    </site>
  </distributionManagement>  
  
  <scm>
  	<url>http://svn.apache.org/repos/asf/creadur/whisker/trunk</url>
  	<connection>scm:svn:http://svn.apache.org/repos/asf/creadur/whisker/trunk</connection>
  	<developerConnection>scm:svn:https://svn.apache.org/repos/asf/creadur/whisker/trunk</developerConnection>
  </scm>
  
  <ciManagement>
    <system>Buildbot</system>
    <url>http://ci.apache.org/builders/whisker-trunk</url>
  </ciManagement>
</project>
