<?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>3.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:git:https://git-wip-us.apache.org/repos/asf/portals-pluto.git</connection>
      <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/portals-pluto.git</developerConnection>
      <url>https://github.com/apache/portals-pluto</url>
   </scm>

  <!-- Dependency Version Properties ======================================= -->

  <!--
  NOTE:

  Modification of these properties affects:
  1)  maven-pluto-plugin/src/main/resources/versions.properties as well!
  -->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <pluto.container.name>Pluto</pluto.container.name>
    <javax.portlet.version.major>3</javax.portlet.version.major>
    <javax.portlet.version.minor>0</javax.portlet.version.minor>
    <portals.portlet-api.version>${project.version}</portals.portlet-api.version>
    <servlet-api.version>8.0.28</servlet-api.version>
    <jsp-api.version>8.0.28</jsp-api.version>
    <jstl.version>8.0.28</jstl.version>
    <el-api.version>8.0.28</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>
<!--     <springframework.version>4.2.3.RELEASE</springframework.version> -->
    <maven.version>2.0.5</maven.version>
    <ant.version>1.6.5</ant.version>
    <commons-io.version>2.4</commons-io.version>
    <ccpp-api.version>1.0</ccpp-api.version>
    <junit.version>4.12</junit.version>
    <jmock.version>1.2.0</jmock.version>
    <xmlunit.version>1.1</xmlunit.version>
    <cdi.version>2.3.1.Final</cdi.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.pluto</groupId>
         <artifactId>portlet-api</artifactId>
         <version>${portals.portlet-api.version}</version>
         <scope>provided</scope>
      </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>
      
      <!-- CDI Library -->
      <dependency>
         <groupId>javax.enterprise</groupId>
         <artifactId>cdi-api</artifactId>
         <version>1.2</version>
      </dependency>
      <dependency>
          <groupId>org.jboss.weld.servlet</groupId>
          <artifactId>weld-servlet</artifactId>
          <version>${cdi.version}</version>
      </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-jar-plugin</artifactId>
           <version>2.4</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>
          <version>3.1</version>
          <configuration>
            <source>1.7</source>
            <target>1.7</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</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>
        <module>PortletV3Demo</module>
        <module>PortletV3AnnotatedDemo</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>
        
        <!-- the Technology Compliance Kit -->
        <module>portlet-tck_3.0</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>
