<?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>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
        <version>3.2.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>
