Pour plus d’information lire : http://maven.apache.org/guides/getting-started/
Maven propose des archetypes de projet, nous allons utiliser celui pour Java. Il peut être utilisé de façon interactive.
mvn archetype:generate \ -DarchetypeGroupId=org.apache.maven.archetypes \ -DarchetypeArtifactId=maven-archetype-quickstart \ -DarchetypeVersion=1.4
On donne ensuite les groupId, le nom de projet (artifactId), le nom du package (par défaut le groupId) et la version. Adapter login et le nom de l’application (MyApp) à votre cas.
Define value for property 'groupId': : fr.univtln.login Define value for property 'artifactId': : MyApp Define value for property 'version': 1.0-SNAPSHOT: : Define value for property 'package': fr.univtln.login: :
Il est possible de donner directement ces informations directement (3 dernières lignes):
mvn archetype:generate \ -DarchetypeGroupId=org.apache.maven.archetypes \ -DarchetypeArtifactId=maven-archetype-quickstart \ -DarchetypeVersion=1.4 \ -DgroupId=fr.univtln.login \ -DartifactId=MyApp \ -Dversion=1.0-SNAPSHOT
Il est aussi possible de choisir parmis la liste de tous les archetypes (c’est celui de Java par défaut):
mvn archetype:generate \ -DarchetypeGroupId=org.apache.maven.archetypes
On peut ensuite compiler le projet :
mvn compile
ou en faire un package directement :
mvn package
On peut ensuite exécuter l’application classiquement en ajoutant le package au classpath et en donnant le nom de la classe :
java -cp target/MyApp-1.0-SNAPSHOT.jar fr.univtln.login.App
on peut aussi l’exécuter avec Maven (ce qui facilitera l’utilisation des dépendances) :
mvn exec:java -Dexec.mainClass="fr.univtln.login.App"
Le fichier pom.xml permet définir des options pour ces plugins de Maven :
Ici on choisi Java 8 :
<build> <plugins> ... <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> ... </plugins> </build>
Avec cet exemple deux jar seront systématique produit lors de mvn package
: un avec seulement les classes du projet et l’autre incluant les dépendances. Les deux contiennent un manifest indiquant la classe “exécutable” par défaut (ici la classe fr.univtln.bruno.d14.simpleihm.App
, à changer en fonction de votre programme).
<build> <plugins> ... <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.4.1</version> <executions> <execution> <id>create-executable-jar</id> <phase>package</phase> <goals> <goal>single</goal> </goals> <configuration> <descriptorRefs> <descriptorRef> jar-with-dependencies </descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>fr.univtln.bruno.d14.simpleihm.App</mainClass> </manifest> </archive> </configuration> </execution> </executions> </plugin> ... </plugins> </build>
Avec Maven, un fichier pom peut rapidement devenir volumineux. De plus, une base commun doit souvent être partagée entre plusieurs projets et/ou plusieurs membres d’une équipe. Comme il s’agit d’une modèle orienté objet, il est possible (et fortement conseillé) de factoriser les paramétrages commun dans un ou plusieurs pom parent. Par exemple, chaque pom d’un projet hérite de celui d’une équipe qui hérite de celui de l’entreprise.
Pour créer un pom parent, il suffit de créer un projet contenant un fichier pom.xml
dont le packaging est pom
puis de le déposer dans un repository commun (mvn install
sur chaque ou de façon plus réaliste utilisation d’un entrepôt maven).
Ensuite un projet peut hériter d’une autre projet en ajoutant dans l’élément project
:
<parent> <groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> </parent>
La commande suivante permet de visualiser le pom après intégration des ancêtres (dont celui par défaut).
mvn help:effective-pom
Un pom parent est proposé ici https://github.com/emmanuelbruno/commonpom (l’artefact est disponible ici https://bintray.com/dptinfoutln/public/commonpom).
Il est possible de supprimer les éléments fabriqués (mvn clean
), de générer un site web pour l’application avec mvn site
(ouvrir target/site/index.html
dans un navigateur web).
Un archetype plus complet utilisant le pom parent précédent est proposé ici https://github.com/emmanuelbruno/javasimplearchetype pour l’utiliser :
- ajouter l’entrepôt maven bin à votre ~/.m2/settings.xml
<profiles> <profile> <repositories> <repository> <snapshots> <enabled>false</enabled> </snapshots> <id>bintray-dptinfoutln-public</id> <name>bintray</name> <url>https://dl.bintray.com/dptinfoutln/public</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <snapshots> <enabled>false</enabled> </snapshots> <id>bintray-dptinfoutln-public</id> <name>bintray-plugins</name> <url>https://dl.bintray.com/dptinfoutln/public</url> </pluginRepository> </pluginRepositories> <id>bintray</id> </profile> </profiles> <activeProfiles> <activeProfile>bintray</activeProfile> </activeProfiles>
- Puis lancer la génération
mvn archetype:generate \ -DarchetypeGroupId=fr.univtln.bruno.archetype \ -DarchetypeArtifactId=javaSimpleArchetype \ -DarchetypeVersion=0.1.0-develop-6 \ -DgroupId=fr.univtln.bruno.test \ -DartifactId=HelloWorld2 \ -Dversion=1.0-SNAPSHOT \ -DprojectShortName=helloworld \ -DgithubAccount=emmanuelbruno \ -DUtlnEmail=emmanuel.bruno@univ-tln.fr
suite à une changement des règles de sécurité liée aux certificats il faut mettre à jour une dépendance d’un plugin dans le pom.xml:
<plugin> <groupId>external.atlassian.jgitflow</groupId> <artifactId>jgitflow-maven-plugin</artifactId> <version>1.0-m5.1</version> <dependencies> <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.54</version> </dependency> </dependencies> </plugin>
—- dataentry page —- type : Quickstart enseignement_tags : D14, D35 technologie_tags : Java, Maven theme_tags : POO