<?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: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.maven.dotnet</groupId>  
  <version>1.0.2</version>  
  <artifactId>dotnet-repository-builder</artifactId>  
  <packaging>pom</packaging>  
  <dependencies> 
    <!--assemblies-->  
    <dependency> 
      <groupId>NPanday.Artifact</groupId>  
      <artifactId>NPanday.Artifact</artifactId>  
      <version>${pom.version}</version>  
      <type>library</type> 
    </dependency>  
    <dependency> 
      <groupId>NPanday.Logging</groupId>  
      <artifactId>NPanday.Logging</artifactId>  
      <version>${pom.version}</version>  
      <type>library</type> 
    </dependency>  
    <dependency> 
      <groupId>NPanday.Model</groupId>  
      <artifactId>NPanday.Model.Pom</artifactId>  
      <version>${pom.version}</version>  
      <type>library</type>  
      <classifier>4b435f4d76e2f0e6</classifier> 
    </dependency>  
    <dependency> 
      <groupId>NPanday.Model</groupId>  
      <artifactId>NPanday.Model.AutomationExtensibility</artifactId>  
      <version>${pom.version}</version>  
      <type>library</type> 
    </dependency>  
    <dependency> 
      <groupId>NPanday.Plugin</groupId>  
      <artifactId>NPanday.Plugin</artifactId>  
      <version>${pom.version}</version>  
      <type>library</type>  
      <classifier>4b435f4d76e2f0e6</classifier> 
    </dependency>  
    <dependency> 
      <groupId>NPanday.Plugin</groupId>  
      <artifactId>NPanday.Plugin.Loader</artifactId>  
      <version>${pom.version}</version>  
      <type>exe</type> 
    </dependency>  
    <dependency> 
      <groupId>NPanday.Plugin</groupId>  
      <artifactId>NPanday.Plugin.MojoGenerator</artifactId>  
      <version>${pom.version}</version>  
      <type>exe</type> 
    </dependency>  
    <dependency> 
      <groupId>NPanday.Plugin</groupId>  
      <artifactId>NPanday.Plugin.Runner</artifactId>  
      <version>${pom.version}</version>  
      <type>exe</type> 
    </dependency>  
    <!--netplugins-->  
    <dependency> 
      <groupId>npanday.plugin</groupId>  
      <artifactId>NPanday.Plugin.Addin</artifactId>  
      <version>${pom.version}</version>  
      <type>netplugin</type> 
    </dependency>  
    <dependency> 
      <groupId>npanday.plugin</groupId>  
      <artifactId>NPanday.Plugin.Devenv</artifactId>  
      <version>${pom.version}</version>  
      <type>netplugin</type> 
    </dependency>  
    <dependency> 
      <groupId>npanday.plugin</groupId>  
      <artifactId>NPanday.Plugin.Resx</artifactId>  
      <version>${pom.version}</version>  
      <type>exe</type> 
    </dependency>  
    <dependency> 
      <groupId>npanday.plugin</groupId>  
      <artifactId>NPanday.Plugin.Settings</artifactId>  
      <version>${pom.version}</version>  
      <type>netplugin</type> 
    </dependency>  
    <dependency> 
      <groupId>NUnit</groupId>  
      <artifactId>NUnit.Framework</artifactId>  
      <version>2.2.8.0</version>  
      <type>library</type> 
    </dependency> 
  </dependencies>  
  <build> 
    <extensions> 
      <extension> 
        <groupId>org.apache.maven.wagon</groupId>  
        <artifactId>wagon-ssh-external</artifactId>  
        <version>1.0-beta-2</version> 
      </extension>  
      <extension> 
        <groupId>org.apache.maven.wagon</groupId>  
        <artifactId>wagon-webdav</artifactId>  
        <version>1.0-beta-2</version> 
      </extension> 
    </extensions>  
    <plugins> 
      <plugin> 
        <groupId>npanday.plugin</groupId>  
        <artifactId>maven-repository-plugin</artifactId>  
        <version>${pom.version}</version>  
        <executions> 
          <execution> 
            <phase>package</phase>  
            <goals> 
              <goal>package</goal> 
            </goals> 
          </execution> 
        </executions> 
      </plugin> 
    </plugins> 
  </build>  
  <profiles> 
    <profile> 
      <activation> 
        <property> 
          <name>VisualStudio2005</name> 
        </property> 
      </activation>  
      <dependencies> 
        <dependency> 
          <groupId>NPanday.VisualStudio</groupId>  
          <artifactId>NPanday.VisualStudio</artifactId>  
          <version>${pom.version}</version>  
          <type>library</type> 
        </dependency>  
        <dependency> 
          <groupId>NPanday.VisualStudio</groupId>  
          <artifactId>NPanday.VisualStudio.Addin</artifactId>  
          <version>${pom.version}</version>  
          <type>visual-studio-addin</type> 
        </dependency>  
      </dependencies> 
    </profile> 
  </profiles> 
</project>
