<?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.0.2</version>  
    <artifactId>npanday-project</artifactId> 
  </parent>  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>npanday</groupId>  
  <artifactId>dotnet-components</artifactId>  
  <packaging>pom</packaging>  
  <name>dotnet-components</name>  
  <url>http://www.codeplex.com/npanday</url>  
  <description>NPanday provides Maven 2.x plugins to support building of .NET applications</description>  
  <modules> 
    <module>dotnet-artifact</module>  
    <module>dotnet-assembler</module>  
    <module>dotnet-core</module>  
    <module>dotnet-dao/project</module>  
    <module>dotnet-executable</module>
    <module>dotnet-model</module>  
    <module>dotnet-plugin</module>  
    <module>dotnet-registry</module>  
    <module>dotnet-repository</module>  
    <module>dotnet-vendor</module> 
  </modules>  
  <profiles> 
    <profile> 
      <activation> 
        <property> 
          <name>Rdf</name> 
        </property> 
      </activation>  
      <repositories> 
        <repository> 
          <id>aduna.org</id>  
          <url>http://repository.aduna-software.org/maven2</url> 
        </repository> 
      </repositories> 
    </profile> 
  </profiles>  
  <distributionManagement> 
    <site> 
      <id>npanday-apache-site</id>  
      <name>NPanday Site</name>  
      <url>file://${basedir}/../../www</url> 
    </site> 
  </distributionManagement> 
</project>
