How Maven handles unknown artifact types
Artifact types are specified using the type element on dependencies:
<dependency>
  <groupId>myproject</groupId>
  <artifactId>webapp</artifactId>
  <version>1.0</version>
  <type>war</type>
</dependency>
The list of artifact types defined by default can be found in the Maven documentation
under Default Artifact Handlers Reference or directly in the source code.
Maven plug-ins can define additional artifact types. To use a custom artifact type in a given project,
the plug-in defining that artifact type must be added to the POM with extensions set to true:
<plugin>
  <groupId>org.apache.axis2</groupId>
  <artifactId>axis2-mar-maven-plugin</artifactId>
  <version>1.6.2</version>
  <extensions>true</extensions>
</plugin>
The interesting question is how Maven handles undefined artifact types. The answer is dictated by the following piece of code in DefaultArtifactHandlerManager:
handler = artifactHandlers.get( type );
if ( handler == null )
{
    handler = new DefaultArtifactHandler( type );
}
This means that Maven will not complaining about unknown artifact types. Instead it will generate artifact handlers as required. A look at DefaultArtifactHandler allows us to determine what will be the properties used by these handlers:
- extension = type
- packaging = type
- classifier = null
- language = "none"
- addedToClasspath = false
- includesDependencies = false