 ------
 NPanday Conventions
 ------
 ------
 2010-07-03
 ------
~~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.

NPanday Conventions

 The following sections describe the conventions used within NPanday itself. This section is useful for developers wishing to
 contribute to NPanday, as well as developers looking for a baseline for their own projects.
 These conventions are evolving and subject to change as better ideas emerge.

* Identifier Conventions

 * Artifact ID - specified within the pom - is equivalent to the project's module name.

 Project Structure

+------+
 |-- NPanday.Artifact
 |   `-- src
 |       `-- main
 |           `-- csharp
 |               `-- NPanday
 |                   `-- Artifact
 |                       |-- ArtifactContext.cs
 |                       `-- Artifact.cs
 `-- pom.xml
+------+

 pom.xml file

+------+
<project xmlns="http://maven.apache.org/POM/4.0.0">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.apache.npanday</groupId>
  <artifactId>NPanday.Artifact</artifactId>
  <packaging>library</packaging>
  <version>0.9</version>
  <name>NPanday.Artifact</name>
</project>
+------+

 * We use three Group IDs: org.apache.npanday, org.apache.npanday.plugins and org.apache.npanday.visualstudio.
 org.apache.npanday.plugins is for mojos or other plugin-related artifacts. org.apache.npanday.visualstudio groups
 Visual Studio Integration. And org.apache.npanday is for everything else.

+------+
<project xmlns="http://maven.apache.org/POM/4.0.0">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.apache.npanday</groupId>
  <artifactId>NPanday.Artifact<artifactId>
  <packaging>library</packaging>
  <version>0.9</version>
  <name>NPanday.Artifact</name>
</project>
+------+

* Plugin Naming Convention

  For plugins going forward, NPanday will use the normal convention of <subject><<<-maven-plugin>>>, e.g.
  <<<wix-maven-plugin>>>.

* Platform-specific Plugins

 * If an assembly will only compile under a specific platform, those values should be specified within the compiler-config.

+------+
 <project xmlns="http://maven.apache.org/POM/4.0.0">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.apache.npanday.pluginss</groupId>
  <artifactId>NPanday.Plugins</artifactId>
  <packaging>pom</packaging>
  <version>0.9</version>
  <name>NPanday.Plugins</name>
  <build>
    <sourceDirectory>src/main/csharp</sourceDirectory>
    <testSourceDirectory>src/test/csharp</testSourceDirectory>
    <plugins>
      <plugin>
        <groupId>org.apache.npanday.plugins</groupId>
        <artifactId>maven-compile-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
          <vendor>MONO</vendor>
          <frameworkVersion>2.0.50727</frameworkVersion>
          <vendorVersion>1.2.3.1</vendorVersion>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
+------+