<?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</version>
  <packaging>pom</packaging>

  <dependencies />

  <parent>
    <groupId>org.apache</groupId>
    <artifactId>apache</artifactId>
    <version>13</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.3</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>
    <!--
    Publication to the website is a two phase operation:

     1. Deploy to local stage: mvn site:deploy
     2. Publish to Apache CMS: mvn scm-publish:publish-scm

    This will only work when the origin for scm-publish:publish-scm
    is the target for site:deploy.

    SO MAKE SURE THAT THE FOLLOWING PROPERTIES RESOLVE TO THE SAME
    DIRECTORY:

     * scmpublish.content
     * whisker.site.url

    -->
    <whisker.site.local>stage</whisker.site.local>
    <scmpublish.content>${whisker.site.local}</scmpublish.content>
    <whisker.site.url>file:${whisker.site.local}</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.9</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>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-scm-publish-plugin</artifactId>
            <version>1.0-beta-2</version>
            <extensions>true</extensions>
            <configuration>
              <!-- svn location for publication -->
              <pubScmUrl>scm:svn:https://svn.apache.org/repos/asf/creadur/site/trunk/content/whisker/</pubScmUrl>
            </configuration>
          </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
    </plugins>
    <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
         <artifactId>wagon-ssh</artifactId>
         <version>1.0-beta-7</version>
      </extension>
    </extensions>
  </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/tags/apache-whisker-0.1</url>
  	<connection>scm:svn:http://svn.apache.org/repos/asf/creadur/whisker/tags/apache-whisker-0.1</connection>
  	<developerConnection>scm:svn:https://svn.apache.org/repos/asf/creadur/whisker/tags/apache-whisker-0.1</developerConnection>
  </scm>

  <ciManagement>
    <system>Buildbot</system>
    <url>http://ci.apache.org/builders/whisker-trunk</url>
  </ciManagement>
</project>
