blob: 385f6539a159e0040305a4b1bfbeeb00d920933d [file] [log] [blame]
------
Introduction to the Standard Directory Layout
------
Jason van Zyl
------
2010-09-05
------
Introduction to the Standard Directory Layout
Having a common directory layout would allow for users familiar with one Maven project to immediately feel
at home in another Maven project. The advantages are analogous to adopting a site-wide look-and-feel.
The next section documents the directory layout expected by Maven and the directory layout created by
Maven. Please try to conform to this structure as much as possible; however, if you can't these settings can
be overridden via the project descriptor.
*--------------------------------+-----------------------------------------------+
| <<<src/main/java>>> | Application/Library sources
*--------------------------------+-----------------------------------------------+
| <<<src/main/resources>>> | Application/Library resources
*--------------------------------+-----------------------------------------------+
| <<<src/main/filters>>> | Resource filter files
*--------------------------------+-----------------------------------------------+
| <<<src/main/assembly>>> | Assembly descriptors
*--------------------------------+-----------------------------------------------+
| <<<src/main/config>>> | Configuration files
*--------------------------------+-----------------------------------------------+
| <<<src/main/webapp>>> | Web application sources
*--------------------------------+-----------------------------------------------+
| <<<src/test/java>>> | Test sources
*--------------------------------+-----------------------------------------------+
| <<<src/test/resources>>> | Test resources
*--------------------------------+-----------------------------------------------+
| <<<src/test/filters>>> | Test resource filter files
*--------------------------------+-----------------------------------------------+
| <<<src/site>>> | Site
*--------------------------------+-----------------------------------------------+
| <<<LICENSE.txt>>> | Project's license
*--------------------------------+-----------------------------------------------+
| <<<NOTICE.txt>>> | Notices and attributions required by libraries that the project depends on
*--------------------------------+-----------------------------------------------+
| <<<README.txt>>> | Project's readme
*--------------------------------+-----------------------------------------------+
At the top level files descriptive of the project: a <<<pom.xml>>> file (and any properties,
<<<maven.xml>>> or <<<build.xml>>> if using Ant). In addition, there are textual documents meant
for the user to be able to read immediately on receiving the source: <<<README.txt>>>,
<<<LICENSE.txt>>>, etc.
There are just two subdirectories of this structure: <<<src>>> and <<<target>>>. The only other
directories that would be expected here are metadata like <<<CVS>>> or <<<.svn>>>, and any
subprojects in a multiproject build (each of which would be laid out as above).
The <<<target>>> directory is used to house all output of the build.
The <<<src>>> directory contains all of the source material for building the project, its site and so on.
It contains a subdirectory for each type: <<<main>>> for the main build artifact, <<<test>>> for
the unit test code and resources, <<<site>>> and so on.
Within artifact producing source directories (ie. <<<main>>> and <<<test>>>), there is one
directory for the language <<<java>>> (under which the normal package hierarchy exists), and one for
<<<resources>>> (the structure which is copied to the target classpath given the default resource definition).
If there are other contributing sources to the artifact build, they would be under other subdirectories: for
example <<<src/main/antlr>>> would contain Antlr grammar definition files.