<?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.portals</groupId>
    <artifactId>portals-pom</artifactId>
    <version>1.3</version>
  </parent>

  <modelVersion>4.0.0</modelVersion>
  <groupId>org.apache.portals.pluto</groupId>
  <artifactId>pluto</artifactId>
  <packaging>pom</packaging>
  <name>Apache Pluto</name>
  <!--
 Any version changes need to be changed in:
 1. All poms of children modules
 2. pluto.container.version.minor property in environment.properties in
 pluto-container module (src/main/resources/org/apache/pluto).
 3. portal-version element in pluto-portal-driver-config.xml in pluto-portal module
 (src/main/webapp/WEB-INF)
 4. expected.serverInfo and expected.portalInfo properties in expectedResults.properties
 in testsuite module (src/main/webapp/WEB-INF/classes)
 5. pluto.version in Ant build file dist-build.xml.
  -->
  <version>2.1.0-SNAPSHOT</version>
  <!-- Due to a bug in maven 2.0, the description must not contain any line breaks or tabs. -->
  <description>Apache Pluto is the Reference Implementation of the Java Portlet Specification.</description>
  <url>http://portals.apache.org/pluto</url>

  <issueManagement>
    <system>jira</system>
    <url>http://issues.apache.org/jira/secure/BrowseProject.jspa?id=10560</url>
  </issueManagement>
  <inceptionYear>2003</inceptionYear>


  <!-- Mailing Lists ======================================================= -->

  <mailingLists>
    <mailingList>
      <name>Pluto User List</name>
      <subscribe>pluto-user-subscribe@portals.apache.org</subscribe>
      <unsubscribe>pluto-user-unsubscribe@portals.apache.org</unsubscribe>
      <post>pluto-user@portals.apache.org</post>
      <archive>http://mail-archives.apache.org/mod_mbox/portals-pluto-user</archive>
    </mailingList>
    <mailingList>
      <name>Pluto Developer List</name>
      <subscribe>pluto-dev-subscribe@portals.apache.org</subscribe>
      <unsubscribe>pluto-dev-unsubscribe@portals.apache.org</unsubscribe>
      <post>pluto-dev@portals.apache.org</post>
      <archive>http://mail-archives.apache.org/mod_mbox/portals-pluto-dev</archive>
    </mailingList>
    <mailingList>
      <name>Pluto SCM List</name>
      <subscribe>pluto-scm-subscribe@portals.apache.org</subscribe>
      <unsubscribe>pluto-scm-unsubscribe@portals.apache.org</unsubscribe>
      <post>pluto-scm@portals.apache.org</post>
      <archive>http://mail-archives.apache.org/mod_mbox/portals-pluto-scm</archive>
    </mailingList>
  </mailingLists>


  <!-- Pluto Committers ==================================================== -->

  <!-- Email format: [name]#a@T#[domain].d0t.[extension]
'@' and '.' characters are added because m2 seems to need them to
generate mailto links. -->

  <developers>

    <developer>
      <name>Michael Blum</name>
      <id>blumm</id>
      <email>blumm#a@T#apache.d0t.org</email>
    </developer>

    <developer>
      <name>Carsten Ziegeler</name>
      <id>cziegeler</id>
      <email>cziegeler#a@T#apache.d0t.org</email>
    </developer>

    <developer>
      <name>David DeWolf</name>
      <id>ddewolf</id>
      <email>ddewolf@apache.org</email>
      <timezone>-4</timezone>
      <url>http://www.daviddewolf.com</url>
      <organization>Three Pillar Software, Inc.</organization>
      <organizationUrl>http://www.threepillarsoftware.com</organizationUrl>
      <roles>
        <role>Java Developer</role>
      </roles>
    </developer>

    <developer>
      <name>Scott Nicklous</name>
      <id>msnicklous</id>
      <email>msnicklous#a@T#apache.d0t.org</email>
      <timezone>+1</timezone>
      <organization>IBM Corporation</organization>
      <organizationUrl>http://www.ibm.com</organizationUrl>
      <roles>
        <role>Specification Lead, JSR 362 Portlet Specification 3.0</role>
        <role>Java Developer</role>
      </roles>
    </developer>

    <developer>
      <name>Nick Lothian</name>
      <id>nlothian</id>
      <email>nlothian#a@T#apache.d0t.org</email>
    </developer>

    <developer>
      <name>Craig Doremus</name>
      <id>cdoremus</id>
      <email>cdoremus#a@T#apache.d0t.org</email>
    </developer>

    <developer>
      <name>Zhong Zheng</name>
      <id>zheng</id>
      <email>zheng#a@T#apache.d0t.org</email>
      <timezone>+1</timezone>
      <organization />
      <roles>
        <role>Java Developer</role>
      </roles>
    </developer>

    <developer>
      <name>Santiago Gala</name>
      <id>sgala</id>
      <email>sgala#a@T#hisitech.d0t.com</email>
      <organization />
    </developer>

    <developer>
      <name>Raphael Luta</name>
      <id>raphael</id>
      <email>raphael#a@T#apache.d0t.org</email>
      <organization />
    </developer>

    <developer>
      <name>David S. Taylor</name>
      <id>taylor</id>
      <email>david#a@T#bluesunrise.d0t.com</email>
      <organization />
    </developer>

    <developer>
      <name>Scott T. Weaver</name>
      <id>weaver</id>
      <email>weaver#a@T#apache.d0t.org</email>
    </developer>

    <developer>
      <name>Stefan Hepper</name>
      <id>sthepper</id>
      <email>sthepper#a@T#apache.d0t.org</email>
    </developer>

    <developer>
      <name>Elliot Metsger</name>
      <id>esm</id>
      <email>esm#a@T#apache.d0t.org</email>
      <timezone>-4</timezone>
      <url>http://uppertank.net/blog</url>
      <organization>Johns Hopkins University, Sheridan Libraries</organization>
      <organizationUrl>http://www.library.jhu.edu</organizationUrl>
    </developer>

    <developer>
      <name>Ate Douma</name>
      <id>ate</id>
      <email>ate#aT#apache.d0t.org</email>
      <timezone>+2</timezone>
      <organization>Hippo</organization>
      <organizationUrl>http://www.onehippo.com</organizationUrl>
      <roles>
        <role>Java Developer</role>
      </roles>
    </developer>

    <developer>
      <name>David Jencks</name>
      <id>djencks</id>
      <email>djencks#aT#apache.d0t.org</email>
      <timezone>-7</timezone>
    </developer>

  </developers>


  <!-- Pluto Contributors ================================================== -->

  <contributors>
    <contributor>
      <name>Michael Westbay</name>
      <email>westbay#a@T#users.d0t.sourceforge.d0t.net</email>
    </contributor>
    <contributor>
      <name>Ken Weiner</name>
      <email>kweiner#a@T#unicon.d0t.net</email>
    </contributor>
    <contributor>
      <name>Ken Atherton</name>
      <email>katherto#a@T#visa.d0t.com</email>
    </contributor>
    <contributor>
      <name>David Hay</name>
    </contributor>

    <contributor>

    </contributor>
  </contributors>

  <scm>
    <connection>scm:svn:http://svn.apache.org/repos/asf/portals/pluto/trunk</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/portals/pluto/trunk</developerConnection>
    <url>http://svn.apache.org/viewcvs.cgi/portals/pluto/trunk</url>
  </scm>

  <!-- Dependency Version Properties ======================================= -->

  <!--
  NOTE:

  Modification of these properties affects:
  1)  maven-pluto-plugin/src/main/resources/versions.properties as well!
  -->
  <properties>
    <pluto.container.name>Pluto</pluto.container.name>
    <javax.portlet.version.major>2</javax.portlet.version.major>
    <javax.portlet.version.minor>0</javax.portlet.version.minor>
    <portals.portlet2-api-spec.version>${project.version}</portals.portlet2-api-spec.version>
    <servlet-api.version>7.0.50</servlet-api.version>
    <jsp-api.version>7.0.50</jsp-api.version>
    <jstl.version>7.0.50</jstl.version>
    <el-api.version>7.0.50</el-api.version>
    <taglibs.standard.version>1.2.1</taglibs.standard.version>
    <jaxb.version>2.1</jaxb.version>
    <jaxb-impl.version>2.1.9</jaxb-impl.version>
    <stax.impl.version>1.2.0</stax.impl.version>
    <commons-digester.version>1.8</commons-digester.version>
    <commons-cli.version>1.0</commons-cli.version>
    <slf4j.version>1.7.5</slf4j.version>
    <springframework.version>2.0.2</springframework.version>
    <maven.version>2.0.5</maven.version>
    <ant.version>1.6.5</ant.version>
    <commons-io.version>1.3.1</commons-io.version>
    <ccpp-api.version>1.0</ccpp-api.version>
    <junit.version>4.0</junit.version>
    <jmock.version>1.2.0</jmock.version>
    <xmlunit.version>1.1</xmlunit.version>

    <!-- The following properties are not directly used as maven
dependencies, they're used by the maven pluto plugin for
handling installation dependencies
TODO: Check if we need all of them. -->
    <xerces.version>2.6.2</xerces.version>
    <xalan.version>2.7.0</xalan.version>
    <castor.version>1.1.1</castor.version>
    <commons-collections.version>3.2</commons-collections.version>
    <commons-httpclient.version>3.0</commons-httpclient.version>
    <commons-beanutils.version>1.7.0</commons-beanutils.version>
    <log4j.version>1.2.14</log4j.version>
    <activation.version>1.1</activation.version>
    <ccpp-ri.version>1.0</ccpp-ri.version>
    <rdffilter.version>1.0</rdffilter.version>
    <jena.version>1.4.0</jena.version>

    <!-- scope of certain dependencies is "compile" for deployment on tomcat, 
         but "provided" for deployment on tomee. See tomee profile. -->
    <dependency.scope>compile</dependency.scope>
  </properties>

  <dependencyManagement>
    <dependencies>
      <!-- Logging =========================================== -->
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-jdk14</artifactId>
        <version>${slf4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>${slf4j.version}</version>
      </dependency>

      <!-- Specification Libraries =========================================== -->
      <dependency>
        <groupId>org.apache.portals</groupId>
        <artifactId>portlet-api_2.0_spec</artifactId>
        <version>${portals.portlet2-api-spec.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-servlet-api</artifactId>
        <version>${servlet-api.version}</version>
      </dependency>

      <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>${jaxb.version}</version>
      </dependency>

      <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>${jaxb-impl.version}</version>
      </dependency>
      <dependency>
        <groupId>stax</groupId>
        <artifactId>stax</artifactId>
        <version>${stax.impl.version}</version>
        <exclusions>
          <exclusion>
            <groupId>stax</groupId>
            <artifactId>stax-api</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

      <!--  CCPP Libraries -->
      <dependency>
        <groupId>javax.ccpp</groupId>
        <artifactId>ccpp</artifactId>
        <version>${ccpp-api.version}</version>
      </dependency>

      <!-- Testing Libraries ================================================= -->
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>jmock</groupId>
        <artifactId>jmock</artifactId>
        <version>${jmock.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>jmock</groupId>
        <artifactId>jmock-cglib</artifactId>
        <version>${jmock.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>xmlunit</groupId>
        <artifactId>xmlunit</artifactId>
        <version>${xmlunit.version}</version>
        <scope>test</scope>
      </dependency>
      <!-- Misc ================================================= -->
      <dependency>
        <groupId>ant</groupId>
        <artifactId>ant</artifactId>
        <version>${ant.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-core</artifactId>
        <version>${maven.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-artifact</artifactId>
        <version>${maven.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-model</artifactId>
        <version>${maven.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-project</artifactId>
        <version>${maven.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-plugin-api</artifactId>
        <version>${maven.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-jsp-api</artifactId>
        <version>${jsp-api.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-el-api</artifactId>
        <version>${el-api.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.taglibs</groupId>
        <artifactId>taglibs-standard-spec</artifactId>
        <version>${taglibs.standard.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.taglibs</groupId>
        <artifactId>taglibs-standard-impl</artifactId>
        <version>${taglibs.standard.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.taglibs</groupId>
        <artifactId>taglibs-standard-jstlel</artifactId>
        <version>${taglibs.standard.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${springframework.version}</version>
        <scope>compile</scope>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${springframework.version}</version>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${springframework.version}</version>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>${commons-io.version}</version>
      </dependency>
      <dependency>
        <groupId>commons-digester</groupId>
        <artifactId>commons-digester</artifactId>
        <version>${commons-digester.version}</version>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>commons-cli</groupId>
        <artifactId>commons-cli</artifactId>
        <version>${commons-cli.version}</version>
        <exclusions>
          <exclusion>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
          </exclusion>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.portals.pluto</groupId>
          <artifactId>maven-pluto-plugin</artifactId>
          <version>${project.version}</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-war-plugin</artifactId>
          <version>2.4</version>
        </plugin>
        <plugin>
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <version>0.10</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-antrun-plugin</artifactId>
          <version>1.7</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <source>1.5</source>
            <target>1.5</target>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.felix</groupId>
          <artifactId>maven-bundle-plugin</artifactId>
          <version>2.0.1</version>
          <extensions>true</extensions>
          <configuration>
            <instructions>
              <Implementation-Title>${project.name}</Implementation-Title>
              <Specification-Version>${project.version}</Specification-Version>
              <Implementation-Version>${project.version}</Implementation-Version>
              <Bundle-DocURL>${project.url}</Bundle-DocURL>
            </instructions>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-release-plugin</artifactId>
          <configuration>
            <!-- During release (prepare) the org.apache.felix maven-bundle-plugin needs classpath access to just build dependent artifacts
                 like the pluto-container-api to determine the needed OSGi imports.
                 However, the default maven-release-plugin goals (clean verify) somehow don't provide those.
                 To fix that, the default release plugin set of preparationGoals is changed to do an "install" instead of just "verify".
            -->
            <preparationGoals>clean install</preparationGoals>
            <mavenExecutorId>forked-path</mavenExecutorId>
            <autoVersionSubmodules>true</autoVersionSubmodules>
          </configuration>
        </plugin>

			<!-- Javascript compressor plugin -->
			<plugin>
				<groupId>net.alchim31.maven</groupId>
				<artifactId>yuicompressor-maven-plugin</artifactId>
				<version>1.1</version>
				<executions>
					<execution>
						<id>compress-js</id>
						<goals>
							<goal>compress</goal>
						</goals>
						<configuration>
							<jswarn>false</jswarn>
						</configuration>
					</execution>
				</executions>
			</plugin>
      </plugins>
    </pluginManagement>

    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

  <profiles>
    <profile>
      <id>all</id>
      <activation>
        <activeByDefault>true</activeByDefault>
        <!-- profile must also be activated when building for tomee -->
        <property>
          <name>tomee</name>
        </property>
      </activation>
      
      <!-- Pluto Modules ======================================================= -->
      <modules>
        <!-- Portlet API module (spec -->
        <module>portlet-api_2.0_spec</module>

        <!-- Pluto Container API -->
        <module>pluto-container-api</module>

        <!-- Pluto Core Modules -->
        <module>pluto-container</module>
        <module>pluto-taglib</module>

        <!-- Pluto Portal and Testsuite Modules -->
        <module>pluto-container-driver-api</module>
        <module>pluto-portal-driver</module>
        <module>pluto-portal-driver-impl</module>
        <module>pluto-portal</module>
        <module>pluto-testsuite</module>
        
        <!-- PortletHub demo portlets -->
        <module>PortletHubDemo</module>

        <!-- Pluto Utilities, Maven Plugins and Ant Tasks -->
        <module>pluto-util</module>
        <module>maven-pluto-plugin</module>
        <module>pluto-ant-tasks</module>
        <module>pluto-site-skin</module>
      </modules>
    </profile>
    
    <profile>
      <id>website</id>
      <!-- For building website documentation, there's no need to include modules. -->
      <modules />
    </profile>
    
    <!-- To build Pluto for deployment on tomee, activate this profile -->
    <!-- Activate using the tomee property: mvn clean install -Dtomee -->
    <profile>
      <id>tomee</id>
      <activation>
        <property>
          <name>tomee</name>
        </property>
      </activation>
      <properties>
         <!-- scope of certain dependencies is "compile" for deployment on tomcat, 
              but "provided" for deployment on tomee. See tomee profile. -->
		  <dependency.scope>provided</dependency.scope>
      </properties>
    </profile>

  </profiles>

</project>
