<?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</version>  
    <artifactId>dotnet-components</artifactId> 
  </parent>  
  <modelVersion>4.0.0</modelVersion>  
  <artifactId>dotnet-model</artifactId>  
  <packaging>pom</packaging>  
  <name>NPanday :: Model</name>  
  <modules> 
    <module>assembly-plugins</module>  
    <module>compiler-plugins</module>  
    <module>executable-plugins</module>  
    <module>netdependency</module>  
    <module>configuration-appenders</module>  
    <module>settings</module>  
    <module>entries</module> 
  </modules>  
  <dependencies> 
    <dependency> 
      <groupId>org.codehaus.plexus</groupId>  
      <artifactId>plexus-utils</artifactId> 
    </dependency> 
  </dependencies>  
  <build> 
    <plugins> 
      <plugin> 
        <groupId>org.apache.maven.plugins</groupId>  
        <artifactId>maven-site-plugin</artifactId>  
        <configuration> 
          <workingDirectory>${project.build.directory}/site</workingDirectory>  
          <siteDirectory>${project.build.directory}/generated-site</siteDirectory> 
        </configuration> 
      </plugin>  
      <plugin> 
        <groupId>org.apache.maven.plugins</groupId>  
        <artifactId>maven-resources-plugin</artifactId>  
        <configuration> 
          <outputDirectory>${project.build.directory}/generated-site</outputDirectory> 
        </configuration> 
      </plugin> 
    </plugins> 
  </build> 
</project>
