<?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/maven-v4_0_0.xsd">

  <parent>
    <groupId>org.apache.jspwiki</groupId>
    <artifactId>jspwiki-builder</artifactId>
    <version>2.10.2-SNAPSHOT</version>
  </parent>

  <modelVersion>4.0.0</modelVersion>
  <artifactId>jspwiki-war</artifactId>
  <name>Apache JSPWiki Main War</name>
  <packaging>war</packaging>

  <dependencies>
    <dependency>
      <groupId>xmlrpc</groupId>
      <artifactId>xmlrpc</artifactId>
    </dependency>

    <dependency>
      <groupId>org.apache.lucene</groupId>
      <artifactId>lucene-queryparser</artifactId>
    </dependency>

    <dependency>
      <groupId>org.apache.lucene</groupId>
      <artifactId>lucene-highlighter</artifactId>
    </dependency>
    
	<dependency>
		<groupId>org.picocontainer</groupId>
		<artifactId>picocontainer</artifactId>
	</dependency>

    <dependency>
      <groupId>org.apache.lucene</groupId>
      <artifactId>lucene-analyzers-common</artifactId>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>net.sourceforge</groupId>
      <artifactId>sandler</artifactId>
    </dependency>

    <dependency>
      <groupId>net.sf.ehcache</groupId>
      <artifactId>ehcache</artifactId>
    </dependency>
    
    <dependency>
      <groupId>oro</groupId>
      <artifactId>oro</artifactId>
    </dependency>

    <dependency>
      <groupId>javax.mail</groupId>
      <artifactId>mail</artifactId>
    </dependency>

    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
    </dependency>

    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
    </dependency>

    <dependency>
      <groupId>org.jvnet.hudson</groupId>
      <artifactId>org.suigeneris.jrcs.diff</artifactId>
    </dependency>

    <dependency>
      <groupId>org.jdom</groupId>
      <artifactId>jdom2</artifactId>
    </dependency>

    <dependency>
      <groupId>jaxen</groupId>
      <artifactId>jaxen</artifactId>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
    </dependency>

    <dependency>
      <groupId>org.freshcookies</groupId>
      <artifactId>freshcookies-security</artifactId>
    </dependency>

    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
    </dependency>

    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
    </dependency>

    <dependency>
      <groupId>net.sourceforge</groupId>
      <artifactId>akismet-java</artifactId>
    </dependency>

    <dependency>
      <groupId>commons-httpclient</groupId>
      <artifactId>commons-httpclient</artifactId>
    </dependency>

    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
    </dependency>

    <dependency>
      <groupId>net.sourceforge.nekohtml</groupId>
      <artifactId>nekohtml</artifactId>
      <scope>runtime</scope>
    </dependency>

    <dependency>
      <groupId>net.sourceforge.stripes</groupId>
      <artifactId>stripes</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.hsqldb</groupId>
      <artifactId>hsqldb</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.hsqldb</groupId>
      <artifactId>sqltool</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.eclipse.jetty.aggregate</groupId>
      <artifactId>jetty-all</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <finalName>JSPWiki</finalName>
    <plugins>
      <!-- With below plugin can deploy to an embedded Tomcat instance via:
         mvn clean install tomcat7:run-war [-Dmaven.test.skip]
         ...or standalone by adding a <server /> entry "myTomcat":
         http://www.jroller.com/gmazza/entry/web_service_tutorial#maventomcat
         and running tomcat7:redeploy instead of run-war in
         string above.

         Either way, JSPWiki URL will be
         http://localhost:8080/JSPWiki
      -->
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <configuration>
          <server>myTomcat</server>
          <url>http://localhost:8080/manager/text</url>
          <path>/${project.build.finalName}</path>
        </configuration>
      </plugin>

      <!-- Surefire plugin (running unit tests):
         http://maven.apache.org/surefire/maven-surefire-plugin/

         Individual tests can be run command line via:
         mvn clean test -Dtest=WikiEngineTest,AclImplTest,...

         All tests can be skipped via -Dmaven.test.skip
       -->
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <systemPropertyVariables>
              <java.io.tmpdir>${project.build.directory}</java.io.tmpdir>
          </systemPropertyVariables>          
          <excludes>
            <!-- time-consuming tests excluded by default -->
            <exclude>**/StressTestVersioningProvider.java</exclude>
            <exclude>**/StressTestSpeed.java</exclude>
            <exclude>**/MassiveRepositoryTest.java</exclude>
          </excludes>
          <includes>
            <include>**/*Test.java</include>
          </includes>
        </configuration>
      </plugin>
      
      <plugin>
        <artifactId>maven-eclipse-plugin</artifactId>
        <version>2.9</version>
        <configuration>
          <downloadSources>true</downloadSources>
          <downloadJavadocs>true</downloadJavadocs>
          <additionalConfig>
            <file>
              <name>.checkstyle</name>
              <location>./src/main/config/dev/jspwiki-checkstyle.xml</location>
            </file>
            <file>
              <name>.settings/org.eclipse.jdt.core.prefs</name>
              <location>./src/main/config/dev/jspwiki-eclipse-codestyle.xml</location>
            </file>
          </additionalConfig>
          <additionalProjectnatures>
            <projectnature>net.sourceforge.metrics.nature</projectnature>
            <projectnature>net.sf.eclipsecs.core.CheckstyleNature</projectnature>
          </additionalProjectnatures>
        </configuration>
      </plugin>

      <!-- wro4j Web Resource Optimizer for Java (http://http://code.google.com/p/wro4j/)
        Merge and compress CSS and JS files using the WRO4J.
        - use UglifyJS for JS compression
        - use Less as advanced CSS preprocessor
      -->

      <plugin>
        <groupId>ro.isdc.wro4j</groupId>
        <artifactId>wro4j-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>buildDefaultJsAndCss</id>
            <phase>prepare-package</phase>
            <goals>
              <goal>run</goal>
              <!--<goal>jshint</goal>-->
            </goals>
            <configuration>
              <!--
              <targetGroups>all</targetGroups>
              <minimize>true</minimize>
              <cssDestinationFolder>d:/static/css/</cssDestinationFolder>
              <jsDestinationFolder>d:/static/js/</jsDestinationFolder>
              <ignoreMissingResources>false</ignoreMissingResources>
              -->
              <cssDestinationFolder>${project.build.directory}/generated-sources/wro/templates/default/</cssDestinationFolder>
              <wroFile>src/main/config/wro/wro.xml</wroFile>
            </configuration>
          </execution>

          <!-- HADDOCK template -->
          <execution>
            <id>buildHaddockJsAndCss</id>
            <phase>prepare-package</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <cssDestinationFolder>${project.build.directory}/generated-sources/wro/templates/haddock/</cssDestinationFolder>
              <wroFile>src/main/config/wro/wro-haddock.xml</wroFile>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <!-- Compress certain CSS and JS files using the YUICompressor
         (http://alchim.sourceforge.net/yuicompressor-maven-plugin/)
      <plugin>
        <groupId>net.alchim31.maven</groupId>
        <artifactId>yuicompressor-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>compressJSfiles</id>
            <goals>
              <goal>compress</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <excludeResources>true</excludeResources>
          <nosuffix>true</nosuffix>
          <webappDirectory>${project.build.directory}/generated-sources/yuicompress</webappDirectory>
          *** relying on jslint-maven-plugin instead, which allows
               better customization ***
          <jswarn>false</jswarn>
        </configuration>
      </plugin>
      -->

      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jslint-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>checkJSPWikiFiles</id>
            <goals>
              <goal>jslint</goal>
            </goals>
            <configuration>
              <sourceJsFolder>src/main/webapp/scripts</sourceJsFolder>
              <failOnIssues>false</failOnIssues>
              <excludes>
                <exclude>prettify.js</exclude>
              </excludes>
            </configuration>
          </execution>
          <!-- Some third party JSs have many multiple number of VARs per function
               block, are outside of our control so suppressing such messages -->
          <execution>
            <id>checkThirdParty</id>
            <goals>
              <goal>jslint</goal>
            </goals>
            <configuration>
              <sourceJsFolder>src/main/webapp/scripts</sourceJsFolder>
              <failOnIssues>false</failOnIssues>
              <includes>
                 <include>prettify.js</include>
              </includes>
              <allowOneVarStatementPerFunction>false</allowOneVarStatementPerFunction>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <configuration>
          <attachClasses>true</attachClasses>
          <webResources>
            <!-- Output directory configured above with the YUICompressor Maven plugin
            <resource>
              <directory>${project.build.directory}/generated-sources/yuicompress</directory>
            </resource>
            -->
            <resource>
              <directory>${project.build.directory}/generated-sources/wro</directory>
            </resource>
          </webResources>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <!-- Unpack the JSP Wiki Pages -->
          <execution>
            <id>unpack-wikipages-private</id>
            <phase>generate-resources</phase>
            <goals>
              <goal>unpack</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>org.apache.jspwiki.wikipages</groupId>
                  <artifactId>jspwiki-wikipages-en</artifactId>
                  <version>${project.version}</version>
                </artifactItem>
              </artifactItems>
              <excludes>META-INF/**</excludes>
              <outputDirectory>${project.build.directory}/jspwiki/data/jspwiki-files</outputDirectory>
            </configuration>
          </execution>
        </executions>  
      </plugin>
    </plugins>
  </build>
</project>
