<?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>
                
    <groupId>org.apache.geronimo.devtools</groupId>
    <artifactId>eclipse-plugins-parent</artifactId>
    <version>3.0.0</version>
    <packaging>pom</packaging>
    <name>Geronimo Eclipse Plugin :: Plugins</name>
                
    <parent>
        <groupId>org.apache.geronimo.devtools</groupId>
        <artifactId>geronimo-eclipse-plugin</artifactId>
        <version>3.0_M1</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
                
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-clean-plugin</artifactId>
                <inherited>false</inherited>
                <configuration>
                    <filesets>
                        <fileset>
                            <directory>${pom.basedir}</directory>
                            <includes>
                                <include>.metadata</include>
                                <include>*.log</include>
                            </includes>
                        </fileset>
                    </filesets>
                </configuration>
            </plugin>
        </plugins>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.geronimo.devtools</groupId>
                    <artifactId>maven-eclipsepde-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>initialize</id>
                            <phase>validate</phase>
                            <goals>
                                <goal>manifestbundles</goal>
                                <goal>install</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>validate-bundle-classpath</id>
                            <phase>process-resources</phase>
                            <goals>
                                <goal>validatemanifest</goal>
                            </goals>
                            <configuration>
                                <classpathEntriesDir>lib</classpathEntriesDir>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <configuration>
                        <archive>
                            <manifestFile>${basedir}/META-INF/MANIFEST.MF</manifestFile>
                        </archive>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <executions>
                        <!-- workaround for bugzilla 147936 -->
                        <execution>
                            <id>backup</id>
                            <phase>process-sources</phase>
                            <configuration>
                                <tasks>
                                    <copy file="${basedir}/.classpath" todir="${project.build.directory}" overwrite="false" failonerror="false" />
                                    <copy file="${basedir}/.project" todir="${project.build.directory}" overwrite="false" failonerror="false" />
                                    <copy file="${basedir}/.options" todir="${project.build.directory}" overwrite="false" failonerror="false" />
                                </tasks>
                            </configuration>
                            <goals>
                                <goal>run</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>restore</id>
                            <phase>compile</phase>
                            <configuration>
                                <tasks>
                                    <copy file="${project.build.directory}/.classpath" todir="${basedir}" overwrite="true" failonerror="false" />
                                    <copy file="${project.build.directory}/.project" todir="${basedir}" overwrite="true" failonerror="false" />
                                    <copy file="${project.build.directory}/.options" todir="${basedir}" overwrite="true" failonerror="false" />
                                </tasks>
                            </configuration>
                            <goals>
                                <goal>run</goal>
                            </goals>
                        </execution>
                        <!-- /workaround -->
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-clean-plugin</artifactId>
                    <configuration>
                        <filesets>
                            <fileset>
                                <directory>${pom.basedir}/lib</directory>
                                <includes>
                                    <include>**</include>
                                </includes>
                            </fileset>
                        </filesets>
                    </configuration>
                </plugin>
               <!-- skip deploy child artifacts in release process-->
               <plugin>
                   <artifactId>maven-deploy-plugin</artifactId>             
                   <configuration>
                     <skip>true</skip>
                  </configuration>
               </plugin>
            </plugins>
        </pluginManagement>
    </build>
    <modules>
        <module>org.apache.geronimo.jaxbmodel.common</module>
        <module>org.apache.geronimo.jee.v21.jaxbmodel</module>
        <module>org.apache.geronimo.j2ee.v11.jaxbmodel</module>
        <module>org.apache.geronimo.st.core</module>
        <module>org.apache.geronimo.st.v11.core</module>
        <module>org.apache.geronimo.st.v20.core</module>
        <module>org.apache.geronimo.st.v21.core</module>
        <module>org.apache.geronimo.st.v22.core</module>
        <module>org.apache.geronimo.st.v30.core</module>
        <module>org.apache.geronimo.st.v30.jaxbmodel</module>
        <module>org.apache.geronimo.st.ui</module>
        <module>org.apache.geronimo.st.v11.schemas</module>
        <module>org.apache.geronimo.st.schemas</module>
        <module>org.apache.geronimo.st.v11.ui</module>
        <module>org.apache.geronimo.st.v20.ui</module>
        <module>org.apache.geronimo.st.v21.ui</module>
        <module>org.apache.geronimo.st.v22.ui</module>
        <module>org.apache.geronimo.st.v30.ui</module>
        <module>org.apache.geronimo.runtime.common</module>
        <module>org.apache.geronimo.runtime.v11</module>
        <module>org.apache.geronimo.runtime.v20</module>
        <module>org.apache.geronimo.runtime.v21</module>
        <module>org.apache.geronimo.runtime.v22</module>
        <module>org.apache.geronimo.runtime.v30</module>
    </modules>
</project>
