You can add support for additional compilers in two different ways:
Of course, if your compiler does not work with the org.apache.maven.dotnet.executable.compiler.impl.DefaultCompiler, you will also need to create your own implementation of org.apache.maven.dotnet.executable.compiler.CompilerExecutable and add the fully-qualified class name implementation to the pluginClass tag.
Example:
<compilerPlugins> <compilerPlugin> <identifier>MS-CS</identifier> <pluginClass>org.apache.maven.dotnet.executable.compiler.impl.DefaultCompiler</pluginClass> <compiler>MICROSOFT</compiler> <executable>csc</executable> <language>C_SHARP</language> <profile>FULL</profile> <frameworkVersions> <frameworkVersion>2.0.50727</frameworkVersion> <frameworkVersion>1.1.4322</frameworkVersion> </frameworkVersions> <platforms> <platform> <operatingSystem>Windows</operatingSystem> <architecture>x86</architecture> </platform> </platforms> <profile>FULL</profile> <commandFilter> <includes> <include>out</include> <include>target</include> <include>delaysign</include> <include>doc</include> <include>keyfile</include> <include>keycontainer</include> <include>platform</include> <include>recurse</include> <include>reference</include> <include>addmodule</include> <include>win32res</include> <include>win32icon</include> <include>resource</include> <include>linkresource</include> <include>debug</include> <include>optimize</include> <include>warnaserror</include> <include>warn</include> <include>nowarn</include> <include>checked</include> <include>unsafe</include> <include>define</include> <include>langversion</include> <include>noconfig</include> <include>baseaddress</include> <include>bugreport</include> <include>codepage</include> <include>utf8output</include> <include>main</include> <include>fullpaths</include> <include>filealign</include> <include>pdb</include> <include>nostdlib</include> <include>lib</include> <include>errorreport</include> <include>moduleassemblyname</include> <include>nologo</include> </includes> </commandFilter> </compilerPlugin> </compilerPlugins>
NMaven matches a plugin based on four user-specified parameters - vendor, language, framework version and profile - and on one platform parameter: operating system. Sometimes a user may want to target, say C# version 2.0.50727 but would like to use a different CompilerExecutable implementation than the standard one. The <profile/> field gives this capability. The profile also has other uses such using a different set of command filters; or, as in the case of the COMPACT profile, specifying a new set of system assemblies.
The .NET Compact Profile:
<compilerPlugin> <identifier>MS-CS:COMPACT</identifier> <pluginClass>org.apache.maven.dotnet.executable.compiler.impl.CSharpCompilerForProfile</pluginClass> <compiler>MICROSOFT</compiler> <executable>csc</executable> <language>C_SHARP</language> <profile>COMPACT</profile> <frameworkVersions> <frameworkVersion>2.0.50727</frameworkVersion> </frameworkVersions> <platforms> <platform> <operatingSystem>Windows</operatingSystem> <architecture>x86</architecture> </platform> </platforms> <defaultAssemblyPath> C:\Program Files\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE </defaultAssemblyPath> <assemblies> <assembly>mscorlib</assembly> <assembly>System.Data</assembly> <assembly>System</assembly> <assembly>System.Drawing</assembly> <assembly>System.Messaging</assembly> <assembly>System.Web.Services</assembly> <assembly>System.Windows.Forms.DataGrid</assembly> <assembly>System.Windows.Forms</assembly> <assembly>Microsoft.WindowsCE.Forms</assembly> <assembly>System.Xml</assembly> </assemblies> <commandFilter> <includes> ... </includes> </commandFilter> </compilerPlugin>
For each compiler that implements a new language, you will also need to 1) add an assembly-plugin entry to the components/dotnet-core/src/resources/META-INF/nmaven/assembly-plugins.xml file and 2) implement a new AssemblyInfoMarshaller interface (provided the default one does not work).
The assembly-plugin entry consists of an identifier (for traceability), a pluginClass, which provides the fully-qualified class name of the AssemblyInfoMarshaller implementation, the language (which should match one of the supported .NET languages within the compiler-plugins.xml) and an extension that NMaven will use in the class file name (the CS assembly plugin will generate a class file called AssemblyInfo.cs).
<assemblyPlugins> <assemblyPlugin> <identifier>CS</identifier> <pluginClass> org.apache.maven.dotnet.assembler.impl.DefaultAssemblyInfoMarshaller </pluginClass> <language>C_SHARP</language> <extension>cs</extension> </assemblyPlugin> <assemblyPlugin> <identifier>VB</identifier> <pluginClass> org.apache.maven.dotnet.assembler.impl.VBAssemblyInfoMarshaller </pluginClass> <language>VB</language> <extension>vb</extension> </assemblyPlugin> </assemblyPlugins>