<?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.archiva.redback.components</groupId>
    <artifactId>redback-components</artifactId>
    <version>2.5-SNAPSHOT</version>
  </parent>

  <groupId>org.apache.archiva.redback.components.modello</groupId>
  <artifactId>modello-plugins</artifactId>
  <version>1.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>Modello Plugins</name>

  <properties>
    <scmBrowseUrl>https://gitbox.apache.org/repos/asf?a=tree;p=archiva-redback-components-modello-plugins.git</scmBrowseUrl>
    <modelloVersion>1.7</modelloVersion>
  </properties>
  <scm>
    <connection>scm:git:http://gitbox.apache.org/repos/asf/archiva-redback-components-modello-plugins.git</connection>
    <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/archiva-redback-components-modello-plugins.git</developerConnection>
    <url>${scmBrowseUrl}</url>
  </scm>


  <url>${webUrl}/${project.artifactId}</url>

  <description>Modello extensions used by Archiva and Continuum.</description>

  <distributionManagement>
    <site>
      <id>apache.website</id>
      <url>${siteUrl}/${project.artifactId}</url>
    </site>
  </distributionManagement>

  <modules>
    <module>modello-db-keywords</module>
    <module>modello-plugin-store</module>
    <module>modello-plugin-jpox</module>
    <module>modello-plugin-redback-registry</module>
    <module>jpox-modello-maven-plugin</module>
  </modules>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.codehaus.modello</groupId>
        <artifactId>modello-core</artifactId>
        <version>${modelloVersion}</version>
      </dependency>
      <dependency>
        <groupId>org.codehaus.modello</groupId>
        <artifactId>modello-test</artifactId>
        <version>${modelloVersion}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.codehaus.modello</groupId>
        <artifactId>modello-plugin-java</artifactId>
        <version>${modelloVersion}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.archiva.redback.components.modello</groupId>
        <artifactId>modello-plugin-store</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.archiva.redback.components.modello</groupId>
        <artifactId>modello-plugin-jpox</artifactId>
        <version>${project.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <reporting>
    <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jxr-plugin</artifactId>
          <reportSets>
            <reportSet>
              <id>aggregate</id>
              <inherited>false</inherited>
              <reports>
                <report>aggregate</report>
              </reports>
            </reportSet>
          </reportSets>
        </plugin>
    </plugins>
  </reporting>


</project>
