<?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> 
  <parent> 
    <groupId>NPanday.ProjectImporter</groupId>  
    <version>1.0.2</version>  
    <artifactId>NPanday.ImporterProjectParent</artifactId> 
  </parent>  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>NPanday.ProjectImporter</groupId>  
  <artifactId>NPanday.ProjectImporterConsole</artifactId>  
  <version>1.0.2</version>  
  <packaging>exe</packaging>  
  <name>NPanday.ProjectImporterConsole</name>  
  <build> 
    <extensions> 
      <extension> 
        <groupId>org.apache.maven.wagon</groupId>  
        <artifactId>wagon-webdav</artifactId>  
        <version>1.0-beta-2</version> 
      </extension> 
    </extensions>  
    <sourceDirectory>src/main/csharp</sourceDirectory>  
    <testSourceDirectory>src/test/csharp</testSourceDirectory>  
    <plugins> 
      <plugin> 
        <groupId>npanday.plugin</groupId>  
        <artifactId>maven-compile-plugin</artifactId>  
        <extensions>true</extensions> 
      </plugin>  
      <plugin> 
        <artifactId>maven-assembly-plugin</artifactId>  
        <configuration> 
          <descriptorRefs> 
            <descriptorRef>src</descriptorRef> 
          </descriptorRefs> 
        </configuration> 
      </plugin> 
    </plugins> 
  </build>  
  <dependencies> 
    <dependency> 
      <groupId>NPanday.ProjectImporter</groupId>  
      <artifactId>NPanday.ProjectImporterEngine</artifactId>  
      <version>1.0.2</version>  
      <type>library</type> 
    </dependency>  
    <dependency> 
      <groupId>NUnit</groupId>  
      <artifactId>NUnit.Framework</artifactId>  
      <type>library</type>  
      <version>2.2.8.0</version> 
    </dependency> 
  </dependencies> 
</project>
