<?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</groupId>
        <artifactId>geronimo</artifactId>
        <version>2.2</version>
    </parent>
    
    <groupId>org.apache.geronimo.plugins</groupId>
    <artifactId>plugins</artifactId>
    <name>Geronimo Plugins</name>
    <packaging>pom</packaging>
    
    <properties>
        <!-- This property is required by the car:package mojo -->
<!-- bug in release plugin may be worked-around by copying it here
        <geronimoVersion>${version}</geronimoVersion> -->
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.apache.geronimo.testsupport</groupId>
            <artifactId>testsupport-common</artifactId>
            <version>${version}</version>
            <scope>test</scope>
        </dependency>
        
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <scope>provided</scope>
        </dependency>
        
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
    <modules>
        <!-- MNG-4052 modules used as import-scope need to be before anything that uses them -->
        <module>pluto</module>
        <module>system-database</module>
        <module>activemq</module>
        <module>aspectj</module>
        <module>axis</module>
        <module>axis2</module>
        <module>client</module>
        <module>clustering</module>
        <module>connector</module>
        <module>console</module>
        <module>corba</module>
        <module>cxf</module>
        <module>derby</module>
        <module>dojo</module>
        <module>debugviews</module>
        <module>hotdeploy</module>
        <module>j2ee</module>
        <module>jasper</module>
        <module>javamail</module>
        <module>jaxws</module>
        <module>myfaces</module>
        <module>openejb</module>
        <module>openjpa</module>
        <module>plancreator</module>
        <module>webservices</module>
        <module>spring</module>
        <module>ca-helper</module>
        <module>uddi</module>
        <module>mejb</module>
        <module>monitoring</module>
        <module>remote-deploy</module>
        <module>sharedlib</module>
        <module>welcome</module>
        <module>concurrent</module>
        <module>classloaders</module>
        <module>procrun</module>
        <module>jetty7</module>
        <module>tomcat</module>
    </modules>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.geronimo.buildsupport</groupId>
                <artifactId>car-maven-plugin</artifactId>
                <!-- Install as extention to allow 'car' packaging to be used. -->
                <extensions>true</extensions>
                <configuration>
                    <archive>
                        <!-- Do not include META-INF/maven to avoid long file problems on windows -->
                        <addMavenDescriptor>false</addMavenDescriptor>
                    </archive>
                    <osiApproved>true</osiApproved>
                    <useMavenDependencies>
                        <value>true</value>
                        <includeVersion>true</includeVersion>
                        <useTransitiveDependencies>true</useTransitiveDependencies>
                    </useMavenDependencies>
                    <commonInstance>
                        <plugin-artifact>
                            <geronimo-version>${geronimoVersion}</geronimo-version>
                            <jvm-version>1.5</jvm-version>
                            <jvm-version>1.6</jvm-version>
                            <!--<source-repository>http://www.geronimoplugins.com/repository/geronimo-2.1</source-repository>-->
                            <source-repository>${PluginSrcRepoLocal}</source-repository>
                            <source-repository>${PluginSrcRepoCentral}</source-repository>
                            <source-repository>${PluginSrcRepoApacheSnapshots}</source-repository>
                            <artifact-alias key="${groupId}/${artifactId}//car">${groupId}/${artifactId}/${version}/car</artifact-alias>
                        </plugin-artifact>
                    </commonInstance>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <profiles> 
        <profile>
            <id>ibmjdk</id>
            <!-- see GERONIMO-4763.  Apparently the tools.jar needs to be specifically referenced on ibm jdks -->
            <activation>
                <file>
                    <exists>${java.home}/../lib/tools.jar</exists>
                </file>
            </activation>
            <build>
                <pluginManagement>
                    <plugins>
                        <plugin>
                            <groupId>org.codehaus.mojo</groupId>
                            <artifactId>native2ascii-maven-plugin</artifactId>
                            <dependencies>
                                <dependency>
                                    <groupId>com.sun</groupId>
                                    <artifactId>tools</artifactId>
                                    <!--the real JDK version could be 1.5 or 1.6-->
                                    <version>1.5.0</version>
                                    <scope>system</scope>
                                    <optional>true</optional>
                                    <systemPath>${java.home}/../lib/tools.jar</systemPath>
                                </dependency>
                            </dependencies>
                        </plugin>
                    </plugins>
                </pluginManagement>
            </build>
        </profile>
        <profile>
            <id>all-subprojects</id>
            <modules>
                <module>jetty</module>
            </modules>
        </profile>
    </profiles> 
</project>
