<?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.1</version>  
    <artifactId>dotnet-components</artifactId> 
  </parent>  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>npanday</groupId>  
  <artifactId>dotnet-model</artifactId>  
  <packaging>pom</packaging>  
  <name>dotnet-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>
