<?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>
    <groupId>org.apache.myfaces.extensions.scripting</groupId>
    <artifactId>extscript-mojarra-bundle</artifactId>
    <packaging>jar</packaging>
    <name>MyFaces Extension Scripting Mojarra 2.0 convenience meta bundle</name>
    <version>1.0.6-SNAPSHOT</version>

    <description>
        The meta bundle bundeling all needed core runtimes
        for a full mojarra 2.2 build
    </description>

    <parent>
        <groupId>org.apache.myfaces.extensions.scripting</groupId>
        <artifactId>extscript-bundles</artifactId>
        <version>1.0.6-SNAPSHOT</version>
    </parent>

    <scm>
        <connection>
            scm:svn:http://svn.apache.org/repos/asf/myfaces/extensions/scripting/trunk/extscript-bundles/extscript-mojarra-bundle
        </connection>
        <developerConnection>
            scm:svn:https://svn.apache.org/repos/asf/myfaces/extensions/scripting/trunk/extscript-bundles/extscript-mojarra-bundle
        </developerConnection>
        <url>
            http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-bundles/extscript-mojarra-bundle
        </url>
    </scm>

    <dependencies>
        <dependency>
            <groupId>org.apache.myfaces.extensions.scripting</groupId>
            <artifactId>extscript-core</artifactId>
            <version>1.0.6-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.apache.myfaces.extensions.scripting</groupId>
            <artifactId>extscript-mojarra</artifactId>
            <version>1.0.6-SNAPSHOT</version>
        </dependency>

    </dependencies>

    <!-- we use the maven shade plugin to bundle our subprojects into bundles -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>1.3.1</version>
                <!--
                    todo use the shade plugin
                    to rename references from
                    util.shared_impl into impl
                -->
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <artifactSet>
                        <includes>
                            <include>org.apache.myfaces.extensions.scripting:extscript-core</include>
                            <include>org.apache.myfaces.extensions.scripting:extscript-mojarra</include>
                        </includes>
                    </artifactSet>
                </configuration>
            </plugin>
        </plugins>
    </build>


</project>
