<?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>org.apache.npanday</groupId>
    <version>1.4.0-incubating</version>  
    <artifactId>npanday-project</artifactId>  
    <relativePath>../pom.xml</relativePath> 
  </parent>
  <modelVersion>4.0.0</modelVersion>  
  <artifactId>NPanday.Project</artifactId>  
  <packaging>pom</packaging>  
  <name>NPanday :: .NET Projects</name>  
  <modules> 
    <module>assemblies</module>  
    <module>../plugins/netplugins</module> 
  </modules>  
  <build> 
    <sourceDirectory>src/main/csharp</sourceDirectory>  
    <testSourceDirectory>src/test/csharp</testSourceDirectory>
    <plugins> 
      <plugin> 
        <groupId>org.apache.npanday.plugins</groupId>
        <artifactId>maven-compile-plugin</artifactId>  
        <extensions>true</extensions>  
        <configuration> 
          <frameworkVersion>2.0.50727</frameworkVersion> 
        </configuration> 
      </plugin>  
    </plugins> 
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.npanday.plugins</groupId>
          <artifactId>maven-compile-plugin</artifactId>  
          <version>${project.version}</version>
        </plugin>
        <plugin>
          <groupId>org.apache.npanday.plugins</groupId>
          <artifactId>maven-resgen-plugin</artifactId>  
          <version>${project.version}</version>
        </plugin>
        <plugin>
          <groupId>org.apache.npanday.plugins</groupId>
          <artifactId>maven-repository-plugin</artifactId>  
          <version>${project.version}</version>
        </plugin>
        <plugin>
          <groupId>org.apache.npanday.plugins</groupId>
          <artifactId>maven-install-plugin</artifactId>  
          <version>${project.version}</version>
        </plugin>
        <plugin>
          <groupId>org.apache.npanday.plugins</groupId>
          <artifactId>maven-resolver-plugin</artifactId>
		  <version>${project.version}</version>
          <configuration>
            <skip>true</skip>
          </configuration>
        </plugin>
		<plugin>
          <groupId>org.apache.npanday.plugins</groupId>
		  <artifactId>maven-xsd-plugin</artifactId>
          <version>${project.version}</version>
        </plugin>
		<plugin>
          <groupId>org.apache.npanday.plugins</groupId>
		  <artifactId>maven-test-plugin</artifactId>
          <version>${project.version}</version>
          <configuration>
             <forceX86>true</forceX86>
          </configuration>
        </plugin>
		<plugin>
          <groupId>org.apache.npanday.plugins</groupId>
		  <artifactId>maven-mojo-generator-plugin</artifactId>
          <version>${project.version}</version>
        </plugin>
        <plugin>
          <groupId>org.apache.npanday.plugins</groupId>
          <artifactId>NPanday.Plugin.Settings.JavaBinding</artifactId>
		  <version>${project.version}</version>
          <configuration>
            <skip>true</skip>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>  
  <!-- TODO: the current NPanday libraries won't apply these properly, so we had to repeat them in the POMs as well -->
  <dependencyManagement> 
    <dependencies> 
      <dependency> 
        <groupId>Microsoft.Build.Engine</groupId>  
        <artifactId>Microsoft.Build.Engine</artifactId>  
        <type>gac_msil</type>  
        <version>2.0.0.0</version>  
        <classifier>b03f5f7f11d50a3a</classifier> 
      </dependency>  
      <dependency> 
        <groupId>EnvDTE</groupId>  
        <artifactId>EnvDTE</artifactId>  
        <type>gac</type>  
        <version>8.0.0.0</version>  
        <classifier>b03f5f7f11d50a3a</classifier> 
      </dependency>  
      <dependency> 
        <groupId>EnvDTE80</groupId>  
        <artifactId>EnvDTE80</artifactId>  
        <type>gac</type>  
        <version>8.0.0.0</version>  
        <classifier>b03f5f7f11d50a3a</classifier> 
      </dependency>  
      <dependency> 
        <groupId>Microsoft.VisualStudio.CommandBars</groupId>  
        <artifactId>Microsoft.VisualStudio.CommandBars</artifactId>  
        <version>8.0.0.0</version>  
        <classifier>b03f5f7f11d50a3a</classifier>  
        <type>gac</type> 
      </dependency>  
      <dependency> 
        <groupId>Microsoft.VisualStudio.TemplateWizardInterface</groupId>  
        <artifactId>Microsoft.VisualStudio.TemplateWizardInterface</artifactId>  
        <version>8.0.0.0</version>  
        <classifier>b03f5f7f11d50a3a</classifier>  
        <type>gac_msil</type> 
      </dependency>  
      <dependency> 
        <groupId>Extensibility</groupId>  
        <artifactId>Extensibility</artifactId>  
        <type>gac</type>  
        <version>7.0.3300.0</version>  
        <classifier>b03f5f7f11d50a3a</classifier> 
      </dependency>  

      <dependency> 
        <groupId>org.apache.npanday</groupId>
        <artifactId>NPanday.Model.Pom</artifactId>  
        <version>1.4.0-incubating</version>
        <type>library</type>  
      </dependency>  
      <dependency> 
        <groupId>org.apache.npanday</groupId>
        <artifactId>NPanday.Model.AutomationExtensibility</artifactId>  
        <version>1.4.0-incubating</version>
        <type>library</type>  
      </dependency>  
      <dependency> 
        <groupId>org.apache.npanday</groupId>
        <artifactId>NPanday.Model.Settings</artifactId>  
        <version>1.4.0-incubating</version>
        <type>library</type>  
      </dependency>  
      <dependency> 
        <groupId>org.apache.npanday</groupId>
        <artifactId>NPanday.Logging</artifactId>  
        <version>1.4.0-incubating</version>
        <type>library</type>  
      </dependency>  
      <dependency> 
        <groupId>org.apache.npanday</groupId>
        <artifactId>NPanday.Artifact</artifactId>  
        <version>1.4.0-incubating</version>
        <type>library</type>  
      </dependency>  
      <dependency> 
        <groupId>org.apache.npanday</groupId>
        <artifactId>NPanday.Utils</artifactId>  
        <version>1.4.0-incubating</version>
        <type>library</type>  
      </dependency>  
      <dependency> 
        <groupId>org.apache.npanday.plugins</groupId>
        <artifactId>NPanday.Plugin</artifactId>  
        <version>1.4.0-incubating</version>
        <type>library</type>  
      </dependency>  
      <dependency> 
        <groupId>org.apache.npanday.visualstudio</groupId>
        <artifactId>NPanday.ProjectImporterEngine</artifactId>  
        <version>1.4.0-incubating</version>
        <type>library</type>  
      </dependency>  
      <dependency> 
        <groupId>org.apache.npanday.visualstudio</groupId>
        <artifactId>NPanday.VisualStudio</artifactId>  
        <version>1.4.0-incubating</version>
        <type>library</type>  
      </dependency>  
    </dependencies> 
  </dependencyManagement> 
  <dependencies>
    <dependency> 
      <groupId>NUnit</groupId>  
      <artifactId>NUnit.Framework</artifactId>  
      <version>2.2.8.0</version>  
      <type>library</type>  
      <scope>test</scope> 
    </dependency> 
  </dependencies>
</project>
