<?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>
    <groupId>org.apache.maven.doxia.ide</groupId>
    <artifactId>eclipse-plugins</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </parent>

  <groupId>org.apache.maven.doxia.ide</groupId>
  <artifactId>plugins</artifactId>
  <packaging>pom</packaging>
  <name>Doxia Tools :: Eclipse IDE - Parent Plugins POM</name>
  <description>Eclipse IDE - Parent Plugins POM</description>

  <!-- dependencies in a parent pom are generally evil, but this 
       is a stopgap until I sort out a dispute with tycho -->
  <dependencies>
    <dependency>
      <groupId>org.apache.maven.doxia.ide</groupId>
      <artifactId>dependencies</artifactId>
      <version>1.0.0-SNAPSHOT</version>
    </dependency>
  </dependencies>

  <modules>
    <module>org.apache.maven.doxia.ide.eclipse.common.ui</module>
    <module>org.apache.maven.doxia.ide.eclipse.apt.ui</module>
    <module>org.apache.maven.doxia.ide.eclipse.confluence.ui</module>
    <module>org.apache.maven.doxia.ide.eclipse.twiki.ui</module>
    <module>org.apache.maven.doxia.ide.eclipse.docbook.ui</module>
    <module>org.apache.maven.doxia.ide.eclipse.fml.ui</module>
    <module>org.apache.maven.doxia.ide.eclipse.xdoc.ui</module>
    <module>org.apache.maven.doxia.ide.eclipse.xhtml.ui</module>
    <module>org.apache.maven.doxia.ide.eclipse.help</module>
  </modules>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-eclipse-plugin</artifactId>
          <configuration>
            <pde>true</pde>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>
