<?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">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <artifactId>tiles-master</artifactId>
        <groupId>org.apache.tiles</groupId>
        <version>4</version>
        <relativePath />
    </parent>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-request</artifactId>
    <version>1.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>Tiles Request Framework</name>
    <description>Request abstraction for various request and template technologies</description>
    <url>http://tiles.apache.org/tiles-request/</url>
    <scm>
        <connection>scm:svn:http://svn.apache.org/repos/asf/tiles/request/trunk/</connection>
        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/tiles/request/trunk/</developerConnection>
        <url>http://svn.apache.org/viewvc/tiles/request/trunk/</url>
    </scm>
    <issueManagement>
        <system>JIRA</system>
        <url>https://issues.apache.org/jira/browse/TREQ</url>
    </issueManagement>

    <modules>
        <module>tiles-request-api</module>
        <module>tiles-request-servlet</module>
        <module>tiles-request-servlet-wildcard</module>
        <module>tiles-request-portlet</module>
        <module>tiles-request-portlet-wildcard</module>
        <module>tiles-request-jsp</module>
        <module>tiles-request-freemarker</module>
        <module>tiles-request-velocity</module>
        <module>tiles-request-mustache</module>
        <module>assembly</module>
    </modules>
    <distributionManagement>
        <site>
            <id>apache-site</id>
            <url>scp://people.apache.org/www/tiles.apache.org/tiles-request</url>
        </site>
    </distributionManagement>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <artifactId>maven-jar-plugin</artifactId>
                    <configuration>
                        <archive>
                            <manifestFile>${tiles.manifestfile}</manifestFile>
                            <manifest>
                                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                            </manifest>
                        </archive>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.felix</groupId>
                    <artifactId>maven-bundle-plugin</artifactId>
                    <version>2.3.7</version>
                    <inherited>true</inherited>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <configuration>
                    <excludeDependencies>true</excludeDependencies>
                    <manifestLocation>target/osgi</manifestLocation>
                    <instructions>
                        <_nouses>true</_nouses>
                        <Bundle-SymbolicName>${tiles.osgi.symbolicName}</Bundle-SymbolicName>
                        <Export-Package>${tiles.osgi.export}</Export-Package>
                        <Private-Package>${tiles.osgi.private}</Private-Package>
                        <Import-Package>${tiles.osgi.import}</Import-Package>
                        <DynamicImport-Package>${tiles.osgi.dynamicImport}</DynamicImport-Package>
                        <Bundle-DocURL>${project.url}</Bundle-DocURL>
                        <Specification-Title>${project.name}</Specification-Title>
                        <Specification-Version>${project.version}</Specification-Version>
                        <Specification-Vendor>${project.organization.name}</Specification-Vendor>
                        <Implementation-Title>${project.name}</Implementation-Title>
                        <Implementation-Version>${project.version}</Implementation-Version>
                        <Implementation-Vendor>${project.organization.name}</Implementation-Vendor>
                        <Implementation-Vendor-Id>org.apache</Implementation-Vendor-Id>
                    </instructions>
                </configuration>
                <executions>
                    <execution>
                        <id>bundle-manifest</id>
                        <phase>process-classes</phase>
                        <goals>
                            <goal>manifest</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <configuration>
                    <releaseProfiles>apache-release</releaseProfiles><!-- xxx tiles still uses "release" instead of "apache-release" -->
                    <goals>deploy site-deploy</goals>
                </configuration>
            </plugin>
        </plugins>

        <defaultGoal>install</defaultGoal>
    </build>

    <properties>
        <tiles.osgi.symbolicName>org.apache.${project.artifactId}</tiles.osgi.symbolicName>
        <tiles.osgi.export>org.apache.tiles.*;version=${project.version}</tiles.osgi.export>
        <tiles.osgi.import>*</tiles.osgi.import>
        <tiles.osgi.dynamicImport />
        <tiles.osgi.private />
        <tiles.manifestfile>target/osgi/MANIFEST.MF</tiles.manifestfile>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.apache.tiles</groupId>
                <artifactId>tiles-request-api</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.tiles</groupId>
                <artifactId>tiles-request-servlet</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.tiles</groupId>
                <artifactId>tiles-request-portlet</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.tiles</groupId>
                <artifactId>tiles-autotag-core-runtime</artifactId>
                <version>1.1-SNAPSHOT</version>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-jdk14</artifactId>
                <version>1.5.8</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.7</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.easymock</groupId>
                <artifactId>easymock</artifactId>
                <version>3.0</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.easymock</groupId>
                <artifactId>easymockclassextension</artifactId>
                <version>3.0</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                    <groupId>javax.servlet</groupId>
                    <artifactId>servlet-api</artifactId>
                    <version>2.5</version>
                    <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>javax.portlet</groupId>
                <artifactId>portlet-api</artifactId>
                <version>2.0</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                    <groupId>org.apache.shale</groupId>
                    <artifactId>shale-test</artifactId>
                    <version>1.0.5</version>
                    <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
                <version>1.5.8</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>2.5.6</version>
                <exclusions>
                    <exclusion>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc-portlet</artifactId>
                <version>2.5.6</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-webmvc</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>jsp-api</artifactId>
                <version>2.1</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.velocity</groupId>
                <artifactId>velocity-tools</artifactId>
                <version>2.0</version>
                <exclusions>
                    <exclusion>
                        <artifactId>struts-taglib</artifactId>
                        <groupId>org.apache.struts</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>struts-tiles</artifactId>
                        <groupId>org.apache.struts</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>struts-core</artifactId>
                        <groupId>org.apache.struts</groupId>
                    </exclusion>
                    <exclusion>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                    </exclusion>
                    <exclusion>
                        <artifactId>sslext</artifactId>
                        <groupId>sslext</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>commons-chain</artifactId>
                        <groupId>commons-chain</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>commons-validator</artifactId>
                        <groupId>commons-validator</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>commons-digester</artifactId>
                        <groupId>commons-digester</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>commons-beanutils</artifactId>
                        <groupId>commons-beanutils</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>dom4j</artifactId>
                        <groupId>dom4j</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>2.3.15</version>
            </dependency>
            <dependency>
                <groupId>com.github.spullara.mustache.java</groupId>
                <artifactId>core</artifactId>
                <version>0.6.2</version>
            </dependency>
            <dependency>
                <groupId>com.github.spullara.mustache.java</groupId>
                <artifactId>builder</artifactId>
                <version>0.6.2</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <profiles>
        <profile>
            <id>apache-release</id>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-install-plugin</artifactId>
                        <configuration>
                            <createChecksum>true</createChecksum>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>rat-maven-plugin</artifactId>
                        <version>1.0-alpha-3</version>
                        <executions>
                            <execution>
                                <phase>verify</phase>
                                <goals>
                                    <goal>check</goal>
                                </goals>
                                <configuration>
                                    <addDefaultLicenseMatchers>false</addDefaultLicenseMatchers>
                                    <licenseMatchers>
                                        <classNames>
                                            <className>rat.analysis.license.ApacheSoftwareLicense20</className>
                                        </classNames>
                                    </licenseMatchers>
                                    <includes>
                                        <include>pom.xml</include>
                                        <include>src/**</include>
                                    </includes>
                                    <excludes>
                                        <exclude>**/*LICENSE.txt</exclude>
                                        <exclude>**/*MANIFEST.MF</exclude>
                                    </excludes>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>linkcheck</id>
            <reporting>
                <plugins>
                    <plugin>
                        <artifactId>maven-linkcheck-plugin</artifactId>
                        <version>1.1</version>
                        <configuration>
                            <excludedLinks>
                                <excludedLink>**/index.html</excludedLink>
                                <excludedLink>**/logo.png</excludedLink>
                            </excludedLinks>
                        </configuration>
                    </plugin>
                </plugins>
            </reporting>

        </profile>
    </profiles>

</project>
