<?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"> 
  <parent> 
    <groupId>npanday</groupId>  
    <version>1.2.1</version>  
    <artifactId>npanday-project</artifactId> 
  </parent>  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>npanday.plugin</groupId>  
  <artifactId>maven-dotnet-plugins</artifactId>  
  <packaging>pom</packaging>  
  <name>NPanday :: Maven Plugins</name>
  <modules> 
    <module>netplugins/NPanday.Plugin.Addin/javabinding</module>  
    <module>netplugins/NPanday.Plugin.Devenv/javabinding</module>  
    <module>netplugins/NPanday.Plugin.Settings/javabinding</module>
    <module>netplugins/NPanday.Plugin.SysRef/javabinding</module>
    <module>netplugins/NPanday.Plugin.Msbuild/javabinding</module>
    <module>custom-lifecycle-maven-plugin</module>
    <module>maven-compile-plugin</module>
    <module>maven-aspx-plugin</module>
    <module>maven-fxcop-plugin</module>  
    <module>maven-install-plugin</module>  
    <module>maven-link-plugin</module>  
    <module>maven-mojo-generator-plugin</module>  
    <module>maven-resgen-plugin</module>  
    <module>maven-repository-plugin</module>  
    <module>maven-resolver-plugin</module>  
    <module>maven-test-plugin</module>  
    <module>maven-vsinstaller-plugin</module>  
    <module>maven-webapp-plugin</module>  
    <module>maven-xsd-plugin</module>  
    <module>maven-xsp-plugin</module>  
    <module>maven-wsdl-plugin</module> 
    <module>wix-maven-plugin</module>
    <module>partcover-maven-plugin</module>
  </modules>  
  <dependencies> 
    <dependency> 
      <groupId>npanday</groupId>  
      <artifactId>dotnet-assembler</artifactId>  
    </dependency>  
    <dependency> 
      <groupId>npanday</groupId>  
      <artifactId>dotnet-dao-project</artifactId>  
    </dependency>  
    <dependency> 
      <groupId>npanday</groupId>  
      <artifactId>dotnet-executable</artifactId>  
    </dependency>  
    <dependency> 
      <groupId>npanday</groupId>  
      <artifactId>dotnet-artifact</artifactId>  
    </dependency>  
    <dependency> 
      <groupId>npanday</groupId>  
      <artifactId>dotnet-plugin</artifactId>  
    </dependency>  
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-core</artifactId>  
    </dependency>
  </dependencies>  
  <build> 
    <plugins>
      <plugin> 
        <groupId>org.apache.maven.plugins</groupId>  
        <artifactId>maven-surefire-plugin</artifactId>  
        <configuration> 
          <reportFormat>plain</reportFormat> 
        </configuration> 
      </plugin>
    </plugins> 
    <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-scm</artifactId>
        <version>1.0-beta-6</version>
      </extension>
      <extension>
        <groupId>org.apache.maven.scm</groupId>
        <artifactId>maven-scm-provider-svnexe</artifactId>
        <version>1.1</version>
      </extension>
    </extensions>
  </build>  
  <reporting> 
    <excludeDefaults>true</excludeDefaults>
     <plugins>  
      <plugin>      
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>emma-maven-plugin</artifactId>
        <version>1.0-alpha-2</version>
      </plugin>
      <plugin> 
        <groupId>org.apache.maven.plugins</groupId>  
        <artifactId>maven-project-info-reports-plugin</artifactId>  
        <version>2.1.2</version> 
        <reportSets>
          <reportSet>
            <reports>
              <report>index</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>  
      <plugin> 
        <groupId>org.apache.maven.plugins</groupId>  
        <artifactId>maven-plugin-plugin</artifactId>  
        <version>2.5.1</version> 
      </plugin>  
      <plugin> 
        <groupId>org.apache.maven.plugins</groupId>  
        <artifactId>maven-jxr-plugin</artifactId> 
      </plugin> 
    </plugins> 
  </reporting>  
  <distributionManagement> 
    <site> 
      <id>npanday.site</id>
      <name>NPanday Site</name>  
      <url>scm:svn:https://npanday.svn.codeplex.com/svn/docs/${project.version}/plugins</url>
    </site> 
  </distributionManagement>
</project>
