Structure standard d'un projet

Maven peut être utilisé avec n'importe quelle structure de répertoires, mais l'utilisation d'une structure standard présente de nombreux avantages:

  • apprentissage rapide pour les nouveaux développeurs arrivant sur un projet
  • pas de discussions oiseuses sur la bonne manière de structurer un projet
  • configuration simplifiée du POM et des plugins (les valeurs pardéfauts des propriétés sont généralement liées à la structure pardéfaut des projets)
  • issu de l'expérience, standardisation compatible avec différentsoutils et enviroennements de développement

artifactId/

Répertoire parent du projet

|-- pom.xml

Le POM.

|-- profiles.xml

Définition de profils locale au projet (et aussi à l'utilisateur et à la machine. ne pas versionner)

|-- LICENSE.txt

Licence du projet (utilisé par le plugin checkstyle

|-- README.txt

Texte d'accueil aux développeurs utilisant directement les sources: précise les caractéristiques du projet.

|-- src/

Les sources du projet: tout ce qui le constitue et qui va être traité lors de la construction.

|   |-- main/

Sources principales pour la construction de l'artefact.

|   |   |-- java/

Racine des sources Java ( et des paquetages). Sera compilé vers target/classes

|   |   |-- resources/

Ressources: copiées/filtrées vers target/classes

|   |   |-- webapp/
|   |       |-- WEB-INF/
|   |       |   `-- web.xml
|   |       `-- index.jsp

Une application web avec la structure standard d'une webapp (pour les projets de type war).

|   |   |-- assembly/
|   |       `-- dep.xml

La description des assemblages (distributions binaires et sources, p.ex.) disponibles pour cette application.

|   |   |-- filters/

Filtres: contient des fichiers properties utilisés pour filtrer les ressources.

|   |   |-- config/

Fichiers de configuration (??)

|   |   |-- bash/
|   |   |-- groovy/
|   |   |-- prolog/
|   |   `-- sql/

Racines des sources pour différents langages, différentes technologies.

|   |-- site/

Racine de la documentation du projet, servira à produire le site projet après mise en forme des sources[1].  

|   |   |-- apt/
|   |   |   |-- format.apt
|   |   |   `-- index.apt
|   |   |-- fml/
|   |   |   `-- faq.fml
|   |   `-- xdoc/
|   |       `-- xdoc.xml

Documentation aux formats xdoc, apt et fml (format de FAQ).

|   |   |-- resources/
|   |   |   |-- css/
|   |   |   |-- img/
|   |   |   `-- js/

Ressources du site: copiées verbatim dans target/site

|   |   |-- site.xml

Descripteur de la structure du site: définit le menu des différentes pages et la navigation dans le site.

|   `-- test/

Répertoire source pour les tests du projet.

|       |-- java/
|       |-- resources/
|       |-- filters/
|       |-- perl/
|       |-- haskell/
|       `-- python/

Structure identique à la structure principale mais pour les tests unitaires. Ces éléments ne sont pas contribués à l' artefact final mais servent uniquement à l'exécution des tests.

`-- target/

Répertoire racine pour tout ce qui est généré par maven.

    |-- artifactId-version.jar

L'artefact généré (but package

    |-- classes/
    |-- test-classes/

Le résultat de la compilation et de la copie des ressources pour le répertoire principal (resp. répertoire de test).

    |-- exported-pom.xml

Le POM consolidé (c'est-à-dire avec tous les paramètres par défaut rendu explicites). C'est ce POM qui est mis dans l'archive de l'artefact.

    |-- site/

Le stite du projet.  

    |-- surefire-reports/

Le résultat de l'exécution des tests.

Cette structure peut-être personnalisée par exemple au moyen d'un archétype

index

Footnotes:  [1]  A priori, tous les fichiers, quels que soient leurs suffixes, produisent des fichiers .html, ce qui implique que les noms debase soient uniques au travers des différentes sources.