<?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.
-->

<!-- $Rev$ $Date$ -->

<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>
        <groupId>org.apache.geronimo.buildsupport</groupId>
        <artifactId>buildsupport</artifactId>
        <version>2.2.1</version>
    </parent>

    <groupId>org.apache.geronimo.buildsupport.it</groupId>
    <artifactId>metadatatest-it4</artifactId>
    <name>Metadata test  it4</name>
    <packaging>car</packaging>

    <dependencies>
        <dependency>
            <groupId>org.apache.geronimo.framework</groupId>
            <artifactId>geronimo-gbean-deployer</artifactId>
            <version>${version}</version>
            <type>car</type>
            <scope>provided</scope>
        </dependency>
        
        <dependency>
            <groupId>velocity</groupId>
            <artifactId>velocity</artifactId>
            <version>1.4</version>
        </dependency>

        <dependency>
            <groupId>com.thoughtworks.xstream</groupId>
            <artifactId>xstream</artifactId>
        </dependency>

        <dependency>
            <groupId>xpp3</groupId>
            <artifactId>xpp3_min</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.geronimo.buildsupport</groupId>
                <artifactId>car-maven-plugin</artifactId>
                <configuration>
                    <category>Test</category>
                    <osiApproved>true</osiApproved>
                    <useMavenDependencies>
                        <value>true</value>
                        <includeVersion>true</includeVersion>
                    </useMavenDependencies>
                    <instance>
                        <plugin-artifact xmlns="http://geronimo.apache.org/xml/ns/plugins-1.3" xmlns:ns2="http://geronimo.apache.org/xml/ns/attributes-1.2">
                            <jvm-version>1.5</jvm-version>
                            <jvm-version>1.5.2</jvm-version>
                            <prerequisite>
                                <id>
                                    <groupId>commons-logging</groupId>
                                    <artifactId>commons-logging</artifactId>
                                </id>
                                <resource-type>joke</resource-type>
                                <description>this is an explanation</description>
                            </prerequisite>
                            <obsoletes>
                                <groupId>commons-logging</groupId>
                                <artifactId>commons-logging</artifactId>
                            </obsoletes>
                            <config-xml-content>
                                <gbean name="DownloadedPluginRepos">
                                    <attribute name="repositoryList">http://geronimo.apache.org/plugins/plugin-repository-list-2.1.txt</attribute>
                                    <attribute name="userRepositories">~/.m2/repository,#{key1}</attribute>
                                </gbean>
                            </config-xml-content>
                            <source-repository>http://foo.com</source-repository>
                            <source-repository>http://bar.com</source-repository>
                            <copy-file relative-to="WEB-INF" dest-dir="bar">META-INF/foo.xml</copy-file>
                            <artifact-alias key="org.apache.geronimo.test/foo//car">org.apache.geronimo.test/bar/1.0/car</artifact-alias>
                            <config-substitution key="key2">value2</config-substitution>
                            <config-substitution key="key1">value1</config-substitution>
                        </plugin-artifact>
                    </instance>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

