<?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.2-SNAPSHOT</version>
  <packaging>pom</packaging>
  <dependencies/>
  <parent>
    <groupId>org.apache</groupId>
    <artifactId>apache</artifactId>
    <version>20</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.4</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.4</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.2</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.6.0</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-maven-plugin</module>
  </modules>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <target.jdk>1.6</target.jdk>
    <junit.version>3.8.2</junit.version>
    <!-- This is the version of Maven required to use the Maven Plugin for this project -->
    <mavenVersion>2.2.1</mavenVersion>
    <!--
    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>
    <mavenPluginPluginVersion>3.3</mavenPluginPluginVersion>
    <!-- Cannot upgrade to 3.0.0 because it requires Java 7 -->
    <findbugsPluginVersion>2.5.5</findbugsPluginVersion>
  </properties>
  <!-- ================================ Build information -->
  <build>
    <defaultGoal>clean install</defaultGoal>
    <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-shade-plugin</artifactId>
          <version>2.2</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.4</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.rat</groupId>
                <artifactId>apache-rat-plugin</artifactId>
              </plugin>
              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <version>2.12.1</version>
              </plugin>
              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>2.10.4</version>
              </plugin>
              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jxr-plugin</artifactId>
                <version>2.4</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.17</version>
              </plugin>
              <plugin>
                <artifactId>maven-pmd-plugin</artifactId>
                <!-- Later versions require Java 1.6+ -->
                <version>3.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.10</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</version>
              </plugin>
              <!-- cobertura plugin -->
              <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>cobertura-maven-plugin</artifactId>
                <version>2.6</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>${findbugsPluginVersion}</version>
              </plugin>
              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-project-info-reports-plugin</artifactId>
                <version>2.7</version>
              </plugin>
            </reportPlugins>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <version>0.12</version>
          <configuration>
            <excludes>
              <exclude>README.md</exclude>
              <exclude>.travis.yml</exclude>
              <exclude>src/site/resources/*.dia</exclude>
            </excludes>
          </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.1</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>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <executions>
          <execution>
            <!-- This checks the bytecode version of the dependencies transitively -->
            <id>enforce-bytecode-version</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <enforceBytecodeVersion>
                  <maxJdkVersion>${target.jdk}</maxJdkVersion>
                </enforceBytecodeVersion>
              </rules>
              <fail>true</fail>
            </configuration>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>extra-enforcer-rules</artifactId>
            <version>1.0-beta-5</version>
          </dependency>
        </dependencies>
      </plugin>
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>check</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>animal-sniffer-maven-plugin</artifactId>
        <version>1.11</version>
        <executions>
          <execution>
            <!-- This checks the source code of our project -->
            <id>check-java-compatibility</id>
            <phase>process-classes</phase>
            <goals>
              <goal>check</goal>
            </goals>
            <configuration>
              <!--
                Note that we cannot use our ${target.jdk} property here, so we
                must change the artifactId of the signature manually when we
                decide to move to a higher version of Java
              -->
              <signature>
                <groupId>org.codehaus.mojo.signature</groupId>
                <artifactId>java16</artifactId>
                <version>1.0</version>
              </signature>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
    <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-ssh</artifactId>
        <version>2.6</version>
      </extension>
    </extensions>
  </build>
  <profiles>
    <profile>
      <id>java8</id>
      <activation>
        <jdk>[1.8,)</jdk>
      </activation>
      <properties>
        <findbugsPluginVersion>3.0.5</findbugsPluginVersion>
      </properties>
    </profile>
  </profiles>
  <!-- ================================ 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>
    <!-- This is the version of Maven required to build this project -->
    <maven>3.0.5</maven>
  </prerequisites>
  <issueManagement>
    <system>JIRA</system>
    <url>https://issues.apache.org/jira/browse/WHISKER</url>
  </issueManagement>
  <!-- TODO
	<ciManagement>
	        <system>Jenkins</system>
	        <url>http://ci.apache.org/builders/whisker_trunk</url>
	        Jenkins builds are at:
	        https://builds.apache.org/job/Creadur-Whisker/ - check Java6 compliance and run all tests
	        https://builds.apache.org/job/Creadur-Whisker-Site/ - generate mvn site
	        https://builds.apache.org/job/Creadur-Whisker-Latest-Jdk/ - check Java8 compliance and run all tests
	        https://builds.apache.org/job/Creadur-Whisker-Site-Latest-Jdk/ - generate mvn site with mvn3 and Java8.
	</ciManagement>
	 -->
  <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>
