 ----
 Maven Command Line Users's Guide
 ----
 18 February 2010
 ----
~~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.

Advanced Users's Guide

  This guide is for those that wish to run builds from the command line using Maven, and to author or alter POMs
  themselves without the help of the Visual Studio Add-in. It assumes that you already have NPanday successfully
  installed as shown in the {{{../installation/index.html} Installation instructions}}.

* Contents

  * {{{./project-types.html} Available Maven project types}}

  * {{{./application-packaging.html} Packaging .NET Applications}}

  * {{{../../plugins/index.html} Available plugins}}

  * {{{./releasing.html} Releasing .NET projects with Maven}}

  * {{{./generate-project.html} Generating template projects}}

  * {{{./dependencies.html} Adding dependencies to the project}}

  * {{{./integration-tests.html} Including Integration Tests}}

  []  