Qual é a estrutura padrão de diretórios e arquivos no Maven?
Autor: Jony Ferreira | Publicado: 2011-06-02T23:00:00-03:00

O uso de diretórios pré-configurados pelo Maven permite que novos usuários se familiarizem imediatamente com um novo projeto Maven.  Podemos dizer que é análogo a uma mudança aparência de um site onde conhecemos a sua estrutura e sabemos como usá-lo, mesmo após mudando apenas o modelo(template). Irei informar os diretórios e em quais contextos os mesmos se aplicam dentro da estrutura do projeto.   src/main/java -&nbsp;&nbsp;&nbsp; Diretório onde está o código fonte Java da Aplicação e/ou Biblioteca   src/main/resources - Arquivos de configuração e outros arquivos devem ficar nesta pasta  src/main/filters - Pasta onde contém arquivos que podem ser configurados conforme o ambiente e/ou profile usado  src/main/assembly - Pasta que possui arquivos descritores de configuração da construção de um determinado artefato  src/main/config - Arquivos de configuração  src/main/webapp - Pasta para conteúdo Web. Aqui se encontra todos os arquivos fonte da parte web.  src/test/java - Pasta que contém os arquivos de testes unitários  src/test/resources - Pasta com arquivos que serão utilizados pelas classes de testes unitários  src/test/filters - Análogo ao diretório src/main/filters só que usado apenas para testes.  src/site - Diretório onde está a configuração do site de documentação do projeto.  LICENSE.txt&nbsp;&nbsp;&nbsp; Arquivo de licença do projeto  NOTICE.txt&nbsp;&nbsp;&nbsp; Avisos e atribuições necessárias para uso de bibliotecas as quais o projeto depende.  README.txt&nbsp;&nbsp;&nbsp; Arquivo Leia-me do projeto.  Na pasta raiz do projeto inicialmente existe apenas o pom.xml assim como arquivos secundários tais como propriedades, build.xml(caso esteja também usando o Ant) e os diretórios src e target(este último será gerado apenas após a execução de alguns comandos tais como mvn compile, mvn package, mvn install etc). Conforme descrito o src é onde está todo o código fonte necessário para o projeto. A pasta target é o local onde todos os artefatos necessários para a criação dos pacotes do projeto serão gerados. Nunca versione(CVS,SVN,Clearcase etc) esta pasta. Ela pode ser apagada sem problemas e o Maven também pode fazer isto(mvn clean). Usamos como base um projeto com códigos fonte Java porém podem existir outras pastas de arquivo fonte tais como Antlr(src/main/antlr) e Groovy(src/main/groovy). Sugiro que use as configurações conforme especificado acima e será possível, como exemplo, criar a seguinte estrutura de projeto para um projeto war(vamos dizer que seu projeto esteja na pasta F:\projetos\maven.default):&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&gt;  &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;  &lt;groupId&gt;br.com.maven3.tutorial&lt;/groupId&gt;  &lt;artifactId&gt;maven.default&lt;/artifactId&gt;  &lt;version&gt;1.0&lt;/version&gt;  &lt;packaging&gt;war&lt;/packaging&gt;&lt;/project&gt;O comando mvn help:effective-pom exibe uma versão extendida do arquivo pom.xml como o Maven realmente entende. Isto irá ajudar no entendimento do que realmente é configurado automaticamente pelo Maven para você. Perceba que apenas como 7 linhas do pom.xml se transformam em mais de 237 linhas!&lt;?xml version="1.0"?&gt;&lt;project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;  &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;  &lt;groupId&gt;br.com.maven3.tutorial&lt;/groupId&gt;  &lt;artifactId&gt;maven.default&lt;/artifactId&gt;  &lt;version&gt;1.0&lt;/version&gt;  &lt;packaging&gt;war&lt;/packaging&gt;    &lt;repositories&gt;    &lt;repository&gt;      &lt;id&gt;Codehaus Snapshots&lt;/id&gt;      &lt;url&gt;nexus.codehaus.org&lt;/url&gt;    &lt;/repository&gt;    &lt;repository&gt;      &lt;snapshots&gt;        &lt;enabled&gt;false&lt;/enabled&gt;      &lt;/snapshots&gt;      &lt;id&gt;central&lt;/id&gt;      &lt;name&gt;Maven Repository Switchboard&lt;/name&gt;      &lt;url&gt;http://repo1.maven.org/maven2&lt;/url&gt;    &lt;/repository&gt;  &lt;/repositories&gt;  &lt;pluginRepositories&gt;    &lt;pluginRepository&gt;      &lt;id&gt;Codehaus Snapshots&lt;/id&gt;      &lt;url&gt;nexus.codehaus.org&lt;/url&gt;    &lt;/pluginRepository&gt;    &lt;pluginRepository&gt;      &lt;releases&gt;        &lt;updatePolicy&gt;never&lt;/updatePolicy&gt;      &lt;/releases&gt;      &lt;snapshots&gt;        &lt;enabled&gt;false&lt;/enabled&gt;      &lt;/snapshots&gt;      &lt;id&gt;central&lt;/id&gt;      &lt;name&gt;Maven Plugin Repository&lt;/name&gt;      &lt;url&gt;http://repo1.maven.org/maven2&lt;/url&gt;    &lt;/pluginRepository&gt;  &lt;/pluginRepositories&gt;  &lt;build&gt;    &lt;sourceDirectory&gt;F:\projetos\maven.default\src\main\java&lt;/sourceDirectory&gt;    &lt;scriptSourceDirectory&gt;F:\projetos\maven.default\src\main\scripts&lt;/scriptSourceDirectory&gt;    &lt;testSourceDirectory&gt;F:\projetos\maven.default\src\test\java&lt;/testSourceDirectory&gt;    &lt;outputDirectory&gt;F:\projetos\maven.default\target\classes&lt;/outputDirectory&gt;    &lt;testOutputDirectory&gt;F:\projetos\maven.default\target\test-classes&lt;/testOutputDirectory&gt;    &lt;resources&gt;      &lt;resource&gt;        &lt;directory&gt;F:\projetos\maven.default\src\main\resources&lt;/directory&gt;      &lt;/resource&gt;    &lt;/resources&gt;    &lt;testResources&gt;      &lt;testResource&gt;        &lt;directory&gt;F:\projetos\maven.default\src\test\resources&lt;/directory&gt;      &lt;/testResource&gt;    &lt;/testResources&gt;    &lt;directory&gt;F:\projetos\maven.default\target&lt;/directory&gt;    &lt;finalName&gt;maven.default-1.0&lt;/finalName&gt;    &lt;pluginManagement&gt;      &lt;plugins&gt;        &lt;plugin&gt;          &lt;artifactId&gt;maven-antrun-plugin&lt;/artifactId&gt;          &lt;version&gt;1.3&lt;/version&gt;        &lt;/plugin&gt;        &lt;plugin&gt;          &lt;artifactId&gt;maven-assembly-plugin&lt;/artifactId&gt;          &lt;version&gt;2.2-beta-5&lt;/version&gt;        &lt;/plugin&gt;        &lt;plugin&gt;          &lt;artifactId&gt;maven-dependency-plugin&lt;/artifactId&gt;          &lt;version&gt;2.1&lt;/version&gt;        &lt;/plugin&gt;        &lt;plugin&gt;          &lt;artifactId&gt;maven-release-plugin&lt;/artifactId&gt;          &lt;version&gt;2.0&lt;/version&gt;        &lt;/plugin&gt;      &lt;/plugins&gt;    &lt;/pluginManagement&gt;    &lt;plugins&gt;      &lt;plugin&gt;        &lt;artifactId&gt;maven-clean-plugin&lt;/artifactId&gt;        &lt;version&gt;2.4.1&lt;/version&gt;        &lt;executions&gt;          &lt;execution&gt;            &lt;id&gt;default-clean&lt;/id&gt;            &lt;phase&gt;clean&lt;/phase&gt;            &lt;goals&gt;              &lt;goal&gt;clean&lt;/goal&gt;            &lt;/goals&gt;          &lt;/execution&gt;        &lt;/executions&gt;      &lt;/plugin&gt;      &lt;plugin&gt;        &lt;artifactId&gt;maven-install-plugin&lt;/artifactId&gt;        &lt;version&gt;2.3.1&lt;/version&gt;        &lt;executions&gt;          &lt;execution&gt;            &lt;id&gt;default-install&lt;/id&gt;            &lt;phase&gt;install&lt;/phase&gt;            &lt;goals&gt;              &lt;goal&gt;install&lt;/goal&gt;            &lt;/goals&gt;          &lt;/execution&gt;        &lt;/executions&gt;      &lt;/plugin&gt;      &lt;plugin&gt;        &lt;artifactId&gt;maven-resources-plugin&lt;/artifactId&gt;        &lt;version&gt;2.4.3&lt;/version&gt;        &lt;executions&gt;          &lt;execution&gt;            &lt;id&gt;default-resources&lt;/id&gt;            &lt;phase&gt;process-resources&lt;/phase&gt;            &lt;goals&gt;              &lt;goal&gt;resources&lt;/goal&gt;            &lt;/goals&gt;          &lt;/execution&gt;          &lt;execution&gt;            &lt;id&gt;default-testResources&lt;/id&gt;            &lt;phase&gt;process-test-resources&lt;/phase&gt;            &lt;goals&gt;              &lt;goal&gt;testResources&lt;/goal&gt;            &lt;/goals&gt;          &lt;/execution&gt;        &lt;/executions&gt;      &lt;/plugin&gt;      &lt;plugin&gt;        &lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;        &lt;version&gt;2.7.1&lt;/version&gt;        &lt;executions&gt;          &lt;execution&gt;            &lt;id&gt;default-test&lt;/id&gt;            &lt;phase&gt;test&lt;/phase&gt;            &lt;goals&gt;              &lt;goal&gt;test&lt;/goal&gt;            &lt;/goals&gt;          &lt;/execution&gt;        &lt;/executions&gt;      &lt;/plugin&gt;      &lt;plugin&gt;        &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;        &lt;version&gt;2.3.2&lt;/version&gt;        &lt;executions&gt;          &lt;execution&gt;            &lt;id&gt;default-testCompile&lt;/id&gt;            &lt;phase&gt;test-compile&lt;/phase&gt;            &lt;goals&gt;              &lt;goal&gt;testCompile&lt;/goal&gt;            &lt;/goals&gt;          &lt;/execution&gt;          &lt;execution&gt;            &lt;id&gt;default-compile&lt;/id&gt;            &lt;phase&gt;compile&lt;/phase&gt;            &lt;goals&gt;              &lt;goal&gt;compile&lt;/goal&gt;            &lt;/goals&gt;          &lt;/execution&gt;        &lt;/executions&gt;      &lt;/plugin&gt;      &lt;plugin&gt;        &lt;artifactId&gt;maven-war-plugin&lt;/artifactId&gt;        &lt;version&gt;2.1.1&lt;/version&gt;        &lt;executions&gt;          &lt;execution&gt;            &lt;id&gt;default-war&lt;/id&gt;            &lt;phase&gt;package&lt;/phase&gt;            &lt;goals&gt;              &lt;goal&gt;war&lt;/goal&gt;            &lt;/goals&gt;          &lt;/execution&gt;        &lt;/executions&gt;      &lt;/plugin&gt;      &lt;plugin&gt;        &lt;artifactId&gt;maven-deploy-plugin&lt;/artifactId&gt;        &lt;version&gt;2.5&lt;/version&gt;        &lt;executions&gt;          &lt;execution&gt;            &lt;id&gt;default-deploy&lt;/id&gt;            &lt;phase&gt;deploy&lt;/phase&gt;            &lt;goals&gt;              &lt;goal&gt;deploy&lt;/goal&gt;            &lt;/goals&gt;          &lt;/execution&gt;        &lt;/executions&gt;      &lt;/plugin&gt;      &lt;plugin&gt;        &lt;artifactId&gt;maven-site-plugin&lt;/artifactId&gt;        &lt;version&gt;2.0.1&lt;/version&gt;        &lt;executions&gt;          &lt;execution&gt;            &lt;id&gt;default-site&lt;/id&gt;            &lt;phase&gt;site&lt;/phase&gt;            &lt;goals&gt;              &lt;goal&gt;site&lt;/goal&gt;            &lt;/goals&gt;            &lt;configuration&gt;              &lt;outputDirectory&gt;F:\projetos\maven.default\target\site&lt;/outputDirectory&gt;              &lt;reportPlugins&gt;                &lt;reportPlugin&gt;                  &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;                  &lt;artifactId&gt;maven-project-info-reports-plugin&lt;/artifactId&gt;                &lt;/reportPlugin&gt;              &lt;/reportPlugins&gt;            &lt;/configuration&gt;          &lt;/execution&gt;          &lt;execution&gt;            &lt;id&gt;default-deploy&lt;/id&gt;            &lt;phase&gt;site-deploy&lt;/phase&gt;            &lt;goals&gt;              &lt;goal&gt;deploy&lt;/goal&gt;            &lt;/goals&gt;            &lt;configuration&gt;              &lt;outputDirectory&gt;F:\projetos\maven.default\target\site&lt;/outputDirectory&gt;              &lt;reportPlugins&gt;                &lt;reportPlugin&gt;                  &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;                  &lt;artifactId&gt;maven-project-info-reports-plugin&lt;/artifactId&gt;                &lt;/reportPlugin&gt;              &lt;/reportPlugins&gt;            &lt;/configuration&gt;          &lt;/execution&gt;        &lt;/executions&gt;        &lt;configuration&gt;          &lt;outputDirectory&gt;F:\projetos\maven.default\target\site&lt;/outputDirectory&gt;          &lt;reportPlugins&gt;            &lt;reportPlugin&gt;              &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;              &lt;artifactId&gt;maven-project-info-reports-plugin&lt;/artifactId&gt;            &lt;/reportPlugin&gt;          &lt;/reportPlugins&gt;        &lt;/configuration&gt;      &lt;/plugin&gt;    &lt;/plugins&gt;  &lt;/build&gt;  &lt;reporting&gt;    &lt;outputDirectory&gt;F:\projetos\maven.default\target\site&lt;/outputDirectory&gt;  &lt;/reporting&gt;&lt;/project&gt;Após este trecho posso dizer que o Maven realmente é muito “habilidoso” e que é uma ferramenta construída para facilitar a nossa vida.