 ----
 Using NPanday with your Maven Development Infrastructure
 ----
 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.

Using NPanday with your Maven Development Infrastructure

  This guide shows how to configure development infrastructure to work with NPanday.

* Contents

  * {{{./artifact-repository.html} Setting up an Artifact Repository}}

  * {{{./continuum.html} Using Continuum to release .NET projects}}

  []