Conventions

 The following sections describe the conventions used within NMaven itself. This section is useful for developers wishing to
 contribute to NMaven, as well as developers looking for a baseline for their own projects.
 These conventions are evolving and subject to change as better ideas emerge: {{{mailto:nmaven-dev@incubator.apache.org} Got better ideas?}}

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

 Project Structure:

+------+
 |-- NMaven.Artifact
 |   `-- main
 |       `-- csharp
 |           `-- NMaven
 |               `-- 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>NMaven.Artifact</groupId>
  <artifactId>NMaven.Artifact</artifactId>
  <packaging>library</packaging>
  <version>0.14</version>
  <name>NMaven.Artifact</name>
</project>
+------+

 * If the module does not contain children modules, the Group ID is the same as the artifact ID.

 * If a module contains children modules, the child module Group ID should either be equivalent to the parent module
 Group ID or be a deriviative of the parent module Group ID.

 * The directory structure of the source directory (typically src/main/csharp) will follow the same pattern as the group ID.

 * 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>NMaven.Plugins</groupId>
  <artifactId>NMaven.Plugins</artifactId>
  <packaging>pom</packaging>
  <version>0.14</version>
  <name>NMaven.Plugins</name>
  <build>
    <sourceDirectory>src/main/csharp</sourceDirectory>
    <testSourceDirectory>src/test/csharp</testSourceDirectory>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.dotnet.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>
+------+


 * Use the default setup within the nmaven-settings.xml is to configure cross-platform builds.

