Publier
Consulter, acheter et télécharger des documents, présentations, modèles et ebooks sur Needocs (PDF, Word, Powerpoint, Excel)

Apache Maven 2

Téléchargement
Publié par : Docenstoc
http://membres-liglab.imag.fr/donsez/cours
Apache Maven 2
Didier DONSEZ
Université Joseph Fourier – Grenoble 1
PolyTech’Grenoble – LIG/ADELE
Didier.Donsez@imag.fr
Didier.Donsez@ieee.org
donsez@apache.org

29/03/2010
Licence
Cette présentation est couverte
par le contrat Creative Commons By NC ND
http://creativecommons.org/licenses/by-nc-nd/2.0/fr/
neva
, M010-2700
z, 2seno
r DieidD
2

29/03/2010
Au sommaire
Motivation
Installation
Cycle de vie
Structure d’un projet Maven
Plugins Maven
Développement d’un plugin
Bibliographie et Webographie
neva
, M010-2700
z, 2seno
r DieidD
3

29/03/2010
Motivations
Rappel sur ANT
Remplaçant de make (pour les développements Java)
NAnt pour .NET
Séquenceur de taches (regroupées en cible)
Graphe de dépendance de « cibles »
Très grand nombre de taches développées
Défaut
Pas de structure « standard » de projet
Pas de cycle de vie « standard » d’un projet
neva
Pas de métadonnées « standard » sur les projets
, M010
scm, website, ML, …
-2700
Pas de séparation de préoccupation
z, 2seno
Libs externes à récupérer pour le projet et pour les tâches
r Dieid
problème de la MAJ des versions
D
4

29/03/2010
Motivations de Maven
Modèle abstrait de projet (POM)
Orienté objet, héritage
Séparation de préoccupations
Cycle de vie standard
Séquencement d’états (goal) standards
Action des plugins en fonction des états
Structure « standard » de projet
Nommage standard des variables (src.dir, …)
Gestion automatique des dépendances avec d’autres projets
Chargement des MAJ
Dépôts des projets
neva
publiques ou privés, local ou distants
, M010
caching et proxy
-2700
Extensible via l’ajout des plugins
z, 2sen
Eux même des projets Maven
o
r DieidD
5

29/03/2010
Installation
Télécharger la distribution binaire
http://maven.apache.org
Dézipper dans un répertoire
Positionner les variables d’environnement
Évites d’être
set JAVA_HOME=c:\j2sdk1.x.y
ennuyer par des
set MAVEN_HOME=c:\maven-2.z.w
VM « parasites »
set PATH=%JAVA_HOME%\bin;%MAVEN_HOME%\bin
mvn –version
mvn --help
(éventuellement) Configurer ~/.m2/settings.xml
neva
repositories, plugins repositories, proxies, …
, M010-2700
z, 2
Intégration à votre IDE (Eclipse, NetBeans, IDEA, …)
seno
r D
http://m2eclipse.codehaus.org/, http://mevenide.codehaus.org …
ieidD
6

29/03/2010
mvn --help
usage: mvn [options] [<goal(s)>] [<phase(s)>]
Options:
-q,--quiet Quiet output - only show errors
-C,--strict-checksums Fail the build if checksums don't match
-c,--lax-checksums Warn if checksums don't match
-P,--activate-profiles Comma-delimited list of profiles to activate
-ff,--fail-fast Stop at first failure in reactorized builds
-fae,--fail-at-end Only fail the build afterwards; allow all non-impacted builds to continue
-B,--batch-mode Run in non-interactive (batch) mode
-fn,--fail-never NEVER fail the build, regardless of project result
-up,--update-plugins
Synonym for cpu
-N,--non-recursive Do not recurse into sub-projects
-npr,--no-plugin-registry
Don't use ~/.m2/plugin-registry.xml for plugin versions
-U,--update-snapshots Forces a check for updated releases and snapshots on remote repositories
-cpu,--check-plugin-updates Force upToDate check for any relevantregistered plugins
-npu,--no-plugin-updates
Suppress upToDate check for any relevant registered plugins
neva
-D,--define Define a system property
, M
-X,--debug Produce execution debug output
010
-e,--errors Produce execution error messages
-2700
-f,--file Force the use of an alternate POM file.
z, 2
-h,--help Display help information
seno
-o,--offline Work offline
r D
-r,--reactor Execute goals for project found in the reactor
ieidD
-s,--settings Alternate path for the user settings file
-v,--version Display version information
7

29/03/2010
Le modèle de projet
(POM pour Project Object Model)
Description d’un projet indépendante des actions à accomplir
Orienté objet
héritage du modèle
Exemple
Identifiant (unique) du projet :
<project>
Identifiant de l’artifact produit
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
type du projet:
<artifactId>my-app</artifactId>
pom, jar, war, ear, bundle, …
<version>1.0.0-SNAPSHOT</version>
dépendances du projet envers
<packaging>jar</packaging>
d’autres projets (artifact)
<dependencies>
constitue le $CLASSPATH
<dependency>
id d’une dépendance
<groupId>junit</groupId>
n
version peut être un interval e
ev
<artifactId>junit</artifactId>
a
, M
<version>3.8.1</version>
0
portée de la dépendance par rapport au cycle
10
de vie (compile, provided, runtime, test)
-2
<scope>test</scope>
700
</dependency>
z, 2sen
</dependencies>
o
la suite bientôt …
r Die

idD
</project>
8

29/03/2010
Dependances
Concerne les artifacts comme les plugins
Résolution transitive
<project> …
<groupId>com.mycompany.app</groupId>
mybundle-1.0.0
<artifactId>mybundle</artifactId>
dependency
<version>1.0.0</version> …
<dependencies>
declaration
<dependency>
<groupId>org.osgi</groupId>
compendium-4.0.0
<artifactId>compendium</artifactId>
<version>4.0.0</version>
transitive
ne
</dependency>
resolution
va
</dependencies>
, M01
… </project>
0
core-4.0.0
-2700
z, 2seno
r D
Sert à constituer le CLASSPATH
ieidD
Pour la compilation, pour les tests, pour l’exécution
9

29/03/2010
Portée des dépendances
5 portées possibles par rapport aux classpaths du projet
compile (défaut)
Disponible dans tous les classpaths
Transistive vers les projets dépendants
provided
compilation and test classpaths
Not transitive.
runtime
runtime and test classpaths.
test
test compilation and execution phases.
system
similar to provided but the artifact is always available and is not looked up in a repository.
import
only used on a dependency of type pom in the <dependencyManagement> section.
neva
Portée transistive
, M010-2700
z, 2seno
r DieidD
10

29/03/2010
Structure « standard » d’un projet
mvn package
neva
, M010-2700
z, 2
Remarque: Maven ajoute le
seno
POM à l’artifact packagé
r DieidD
Remarque: Maven crée un répertoire de travail
${basedir}/target commun à tous les plugins
13

29/03/2010
Cycle de vie (par défaut) d’un projet
Séquence de 21 phases
Code
Source
validate
generate-test-sources
pre-integration-test
initialize
process-test-sources
integration-test
generate-test-resources
post-integration-test
generate-sources
process-test-resources
process-sources
test-compile
generate-resources
neva
test
process-resources
verify
, M010-270
compile
instal
0
z, 2sen
process-classes
package
deploy
o
r DieidD
artifact
14

29/03/2010
Phases et Buts (goals)
A chaque phase est associé un ou plusieurs buts
d’un ou de plusieurs plugins
test
surefire:test
package
jar:jar
Remarque
mvn resources:resources compiler:compile resources:testResources compiler:testCompile
neva
surefire:test jar:jar est équivalent à mvn package
, M010-2
D’autre cycles de vie ont été définis
700
z, 2
clean = pre-clean
clean
post-clean
seno
site = pre-site
site
post-site
site-deploy
r Dieid

D
15

29/03/2010
Rappel
Numérotation des versions
Schéma
<major>.<mini>[.<micro>][-<qualifier>[-<buildnumber>]]
Incrément
Major : changement majeur
pas de retro-compatibilité (descendante) garantie
Mini : ajouts fonctionnels
retro-compatibilité garantie
Micro : maintenance corrective (bug fix)
Qualificateurs
SNAPSHOT (Maven) : version en évolution
alpha1 : version alpha (très instable et incomplète)
beta1, b1, b2 : version beta (instable)
rc1, rc2 : release candidate
m1, m2 : milestone
ea : early access
20081014123459001 : date du build
jdk5 : dépendance avec une arch, un os, un langage
Ordre sur les versions
ne
Différent de l’ordre lexicographique
va
1.1.1 < 1.1.2 < 1.2.2
, M0
1.1.1-SNAPSHOT < 1.1.1
10-2
1.1.1-alpha1 < 1.1.1-alpha2 < 1.1.1-b1 < 1.1.1-rc1 < 1.1.1-rc2 < 1.1.1
700
Remarque (parfois)
z, 2
<mini> pair : release stable
sen
<mini> impair : release instable
o
r DieidD
17

29/03/2010
Versionnement
Snapshot
A snapshot in Maven is an artifact which has been prepared using
the most recent sources available. … Specifying a snapshot
version for a dependency means that Maven will look for new
versions of that dependency without you having to manually specify
a new version.
mvn -U command line option to force the search for updates.
Dépendances
neva
Spécification d’intervalles de versions
, M010
<dependency>
-270
<groupId>org.codehaus.plexus</groupId>
0
z, 2
<artifactId>plexus-utils</artifactId>
seno
<version>[1.1,)</version>
r Die
</dependency>
idD
19

29/03/2010
Quelques plugins usuels
Core
clean, compiler, deploy, install, resources, site, surefire, verifier
Packaging
ear, ejb, jar, rar, war, bundle (OSGi)
Reporting
changelog, changes, checkstyle, clover, doap, docck, javadoc, jxr,
pmd, project-info-reports, surefire-report
Tools
ant, antrun, archetype, assembly, dependency, enforcer, gpg, help,
invoker, one (interop Maven 1), patch, plugin, release, remote-
resource, repository, scm
neva
IDEs
, M010
eclipse, netbeans, idea
-2700
Autres
z, 2seno
exec, jdepend, castor, cargo, jetty, native, sql, taglist, javacc, obr …
r DieidD
http://maven.apache.org/plugins/, http://mojo.codehaus.org/plugins.html, …
21

29/03/2010
Configuration des plugins
Passage de paramètres autre que ceux définis par défaut
Exemple
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
n
<manifest>
eva
<mainClass>${artifactId}.Main</mainClass>
, M0
<addClasspath>true</addClasspath>
10-2
</manifest>
700
</archive>
z, 2
</configuration>
sen
</plugin>
o
r D
</plugins>
ieid
</build>
D
22

29/03/2010
Profils
Motivation
Améliorer la portabilité des projets par rapport aux
environnements
Différents JVM, versions de Java, serveurs JEE, SGBD,
développement versus production
Créer des variations (=profils) de projets
Elément <profile> du build
Contient les variations de plugins et entre les plugins
Activation du profil
neva
, M0
Profil par défaut
10-270
En fonction des propriétés (systèmes, version JDK, …)
0
z, 2sen
Par son identifiant
o
r Dieid
mvn --activate-profiles felix,equinox clean instal
D
24

29/03/2010
Organisation hiérarchique de projets
Motivations
Organiser le développement en sous-projets
Avec N niveaux (N>=1)
Méthode
Création d’un super POM (de type pom) par niveau
Regroupe les plugins/goals communs du même niveau
Les sous-projets (appelé modules) héritent de ce super pom
Exemple
neva
, M010-27
Commande
00
z, 2
mvn --reactor clean instal
seno
Pour la construction globale
r DieidD
26

29/03/2010
Documentation Web d’un projet
Transforme plusieurs formats de documentation
XDOC, APT (Almost Plain Text), FML (FAQ ML), DocBook Simple, Twiki,
Confluence
La documentation source peut contenir des variables du
projet ($project.name, $reports, …)
n
mvn site:site
eva
, M010-2700
z, 2seno
r DieidD
27

29/03/2010
Dépôts de projets
Local ~/.m2/repository
Projets (dont artifacts) installés
localement
mvn install
mvn install:install-file
Caches des projets (artifacts) téléchargés
depuis les dépots distants
Listés dans les POM et settings.xml
Distants
Dépôts d’entreprise
ne
Cache de dépôts
va
, M0
Dépôts publiques
10-270
Structure
0
z, 2se
Nommage hiérarchique
no
r Die
${groupId}.replace('.','/') / ${articfactId} / ${version}
idD
28

29/03/2010
Dépôts publiques
Les principaux
Apache Maven Central
http://repo1.maven.org/maven2/
Plus de 20000 artifacts décrits (en 2007)
Tous en licence ASL v2
CodeHaus
http://www.codehaus.org
Dependance vers d’autres licences (BSD, …)
neva
, M010-2700
z, 2seno
r DieidD
29

29/03/2010
Recherche des dépendances
Web Servers
project.xml (POM)
Download artifact
1
Get dependencies
3
Maven core
HTTP
Remote
Repositories
2
4
(listed in
Local
~/.m2/settings.xml)
n
Checks if
Repository
Save artifact in local
eva
artifact exists
repository
in local repo.
~/.m2/repository
, M010-2700
JVM 1
JVM 2
z, 2seno
r D
R1: La mise à jour du dépôt local est journalière (sauf si mvn –U)
ieid
R2: Les plugins sont recherchés et mis à jour de la même façon
D
30
D’après Vincent Massol

29/03/2010
Substitution de variables à la construction
Motivations
Instancier les valeurs des ressources lors de la phase process-
resources
Exemple de POM
… <build>
<filters>
<filter>src/main/filters/filter.properties</filter>
</filters>
# src/main/filters/filter.properties
<resources>
my.filter.value=Hel o !
<resource>
neva
<directory>src/main/resources</directory>
, M010
<filtering>true</filtering>
-270
# src/main/resources/application.properties
0
</resource>
z, 2
message=${my.filter.value}
seno
</resources>
application.name=${project.name}
r Dieid
</build>
D
application.version=${project.version}
31

29/03/2010
Archetype
Construction initial d’un projet Maven
En fonction d’un type de projet T
T= quickstart, archetype, bundles, j2ee-simple, marmalade-
mojo, mojo, plugin, plugin-site, portlet, profiles, simple, site,
site-simple, webapp, …
Exemple
mvn archetype:create
mode interactif
mvn archetype:create
nev
-DgroupId=demo.maven
a
, M01
-DartifactId=hello
0-270
-Dversion=0.1.0-SNAPSHOT
0
z, 2se
-DarchetypeGroupId=org.apache.maven.archetypes
no
r D
-DarchetypeArtifactId=maven-archetype-quickstart
ieidD
32

29/03/2010
Archetypes personnalisés
Possibilité de créer ses propres archetypes
de zero
mvn archetype:create
-DarchetypeGroupId=org.apache.maven.archetypes
-DarchetypeArtifactId=maven-archetype-archetype
-DgroupId=com.mycompany
-DartifactId=my-archetype
depuis un archetype existant
Développement
ne
Basé sur des templates Velocity (http://velocity.apache.org/)
va
, M010-2700
z, 2seno
r DieidD
33

29/03/2010
Développement de plugins
Plugin = { <goal,MOJO> }
MOJO = Maven POJO
Annotations XDocLet
Langages
Java et Groovy (pour le scripting)
D’autres possibles …
nev
Déploiement
a
, M01
Artifact Maven
0-2700
Utilise les mécanismes de déploiement (version, dépendances, …)
z, 2sen
Dépôts de plugins
o
r Die
http://maven.apache.org/plugins/, http://repository.codehaus.org/
idD
34

29/03/2010
Développement de plugins
Exemple (i)
package sample.plugin;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
/**
phase et but durant laquel e
* Says "Hi" to the user.
execute() est appelé
* @goal sayhi
* @phase compile
*/
paramètre renseigné dans
public class GreetingMojo extends AbstractMojo {
<configuration>
/** The greeting to display.
* @parameter alias="message" expression="Hel o, world (from ${project.groupId}:${project.artifactId})" */
private String greeting;
Integer, …, String, List, Properties,
Map, Object, File, URL, …
/** The classpath.
neva
* @parameter expression="${project.compileClasspathElements}"
, M0
* @required
10-2
* @readonly */
paramètre issue du pom
700
private List classpathElements;
z, 2seno
r D
public void execute() throws MojoExecutionException {
ieidD
getLog().info(greeting);
getLog().info("Project classpath: " + classpathElements().toString().replace( ',', ';' ));
35
} }

29/03/2010
Développement de plugins
Exemple (ii)
Dans le POM
<build>
<plugins>
<plugin>
<groupId>sample.plugin</groupId>
<artifactId>maven-hello-plugin</artifactId>
<configuration>
<message>Welcome</message>
</configuration>
</plugin>
neva
</plugins>
, M010
</build>
-2700
Exécution
z, 2seno
mvn sample.plugin:maven-hello-plugin:sayhi
r DieidD
36

29/03/2010
Plugins et Cycles de vie
MOJO attaché à une phase du cycle de vie
@nnotations doclet
Cycles de vie personnalisés
Surcharge de META-INF/plexus/components.xml,
neva
, M010-2700
z, 2seno
r DieidD
37

29/03/2010
Appel de tâches ANT dans un projet
Maven
Motivations
récupération de projets existants avant connversion
Exécution de taches patrimoniales n’ayant pas de plugins équivalents
Remarque: pensez à utiliser la définition de Macro ANT !
Exemple avec le plugin org.apache.maven.plugins:maven-antrun-plugin
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>generate-sources</phase>
<configuration>
<tasks unless="maven.test.skip">
<!-- Place any ant task here. You can add anything
you can add between <target> and </target> in a build.xml.-->
<echo message="To skip me, just cal mvn -Dmaven.test.skip=true"/>
<exec dir="${basedir}"
nev
executable="${basedir}/src/main/sh/do-something.sh" failonerror="true">
a
, M0
<arg line="arg1 arg2 arg3 arg4" />
10-2
</exec>
700
</tasks>
z, 2
</configuration>
seno
<goals>
r D
<goal>run</goal>
ieid
</goals>
D
</execution>
</executions>
38
</plugin>

29/03/2010
Conversion d’un projet ANT en projet
Maven
2 possibilités pour la structure du projet
Réorganiser (manuellement, projet ANT si plusieurs
projets)
src
src/main/java, src/test/java, doc
src/site
classes
target/classes, build
target, …
Configurer les paramètres par défaut du POM
en fonction de la structure du projet ANT
nev
Définir les dépendances
a
, M010
en fonction du <classpath …>
-2700
z, 2seno
r DieidD
39

29/03/2010
Antlib for Maven
Taches Maven pour projet ANT
Manipulation d’ artifacts depuis un projet Ant
Gestion (transitive) des dépendances
scope recognition and SNAPSHOT handling
Déploiment des artifacts vers un dépot Maven
Analyse d’un pom.xml
Exemple
<artifact:dependencies pathId="dependency.classpath">
<dependency groupId="javax.servlet" artifactId="servlet-api"
version="2.4" scope="provided" />

neva
</artifact:dependencies>
, M01
<javac ...>
0-2700
<classpath refid="dependency.classpath" />
z, 2se
...
no
r D
</javac>
ieidD
40

29/03/2010
Maven et autres langages
Maven est plutôt orienté vers des projets Java
Projets pour d’autres environnements et langages
.NET, …
JNI, C, C++, C#, PHP, JavaScript, GWT, Basic, ..
Structure du projet
src/main/java
src/main/c
src/main/cpp
src/main/cs
src/main/php
neva
src/main/vb
, M01

0-270
Plugins
0
z, 2
maven-antrun-plugin (org.apache.maven.plugins:)
seno
pour la récupération de tâches Ant patrimoniales
r Dieid
native-maven-plugin (org.codehaus.mojo:)
D
42

29/03/2010
Misc
Maven SCM
Plugin offrant une API commun vers les principaux SCM
Commandes
Changelog - command to show the source code revisions
Checkin - command for commiting changes
Checkout - command for getting the source code
Diff - command for showing the difference of the working copy with the remote ones
Edit - command for starting edit on the working copy
Status - command for showing the scm status of the working copy
Tag - command for tagging the certain revision
UnEdit - command for to stop editing the working copy
Update - command for updating the working with the latest changes
Validate - validates the scm information on the pom
Supported SCM
Subversion, CVS, Starteam, Clearcase, Perforce, bazaar
Maven Continuum
continuous integration (JEE-based) server for building Java based projects.
Schedulable projects: Maven 1, Maven 2, Ant, Shell scripts
ne
Notifications : Mail and IM (IRC, Jabber, MSN)
va
Maven Archiva
, M010
Repository manager (search, security, reporting, …)
-2700
Maven Wagon
z, 2se
Outil de transfert des artifacts vers des dépots (distants ou locaux)
no
File, HTTP, HTTP lightweight, FTP, SSH/SCP, WebDAV, SCM
r DieidD
43

29/03/2010
Misc
Apache Ivy
Gestionnaire de dépendances (pour projet Ant)
Sous gestionnaire pour des dépôts Maven (locaux ou distants)
neva
, M010-2700
z, 2seno
r DieidD
44

29/03/2010
M2Eclipse
Plugin Eclipse pour Maven
Création de projets
Wizard, Archetypes
Edition du POM
Affichage graphique
Recherche de dépendances
Depuis les dépôts local et distants
Ajout des dépendances du POM
au .classpath
ne
org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER
va
, M01
Exécution des principales phases : clean, test, install, …
0-2700
Livre en ligne
z, 2seno
http://www.sonatype.com/m2eclipse/documentation/download-book?file=books/m2eclipse-book.pdf
r DieidD
45

29/03/2010
M2Eclipse
Plugin Eclipse pour Maven
neva
, M010-2700
z, 2seno
r DieidD
46

29/03/2010
Maven Continuum
http://maven.apache.org/continuum/
continuous integration (JEE-based)
server for building Java based projects.
Schedulable projects: Maven 1, Maven 2,
Ant, Shell scripts
Notifications : Mail and IM (IRC, Jabber,
MSN)
Release management
nev
SCM support
a
, M010
CVS, Subversion, Clearcase, Perforce, Starteam, Visual
-270
Source Safe, CM Synergy, Bazaar, Mercurial
0
z, 2sen
External access with XMLRPC
o
r DieidD
47

29/03/2010
Maven Continuum
Console
neva
, M010-2700
z, 2seno
r DieidD
48

29/03/2010
Divers
Recherche d’artifacts
http://www.mvnrepository.com/
neva
, M010-2700
z, 2seno
r DieidD
49

29/03/2010
Misc
Tree Surgeon (Maven pour .NET ?)
http://confluence.public.thoughtworks.org/display/TREE/Tree+Surgeon
« Tree Surgeon est un outil Open Source édité par la
société de Martin Fowler Thoughtworks. "It is a tool that
automates the process of establishing a directory
structure with source code stubs and supporting
infrastructure in a consistent manner. (...) It supports
tools like NAnt and NUnit by generating build files and
unit tests as part of the automated process. . Même si
neva
Tree Surgeon (au nom peu invocateur) est loin
, M010-2
d'atteindre le niveau fonctionnel de son homologue Java
700
z, 2
Maven, il constitue une excellente base pour
seno
industrialiser la génération de squelettes de projets
r DieidD
.NET. »
50

29/03/2010
Good & Best Practices
Beginners
KISS (Keep It Simple, Stupid)
Start from scractch
No Copy/Paste
Use only what you need
Filtering, Modules, Profiles, …
Bad practices
Ignore maven conventions
Different versions in sub modules
neva
Too many inheritance levels
, M010
AntRun (OK for integration test)
-2700
Plugins without versions
z, 2seno

r DieidD
From Arnaud Heritier
51

29/03/2010
Maven 3.x
Any-source POM (json, groovy, …)
Versionless parent elements
Mixin : a composition of POMs
Better IDE integration
Error reporting
Codes d’erreur commune
Lifecycle extension points
Plugin extension points
example: war extends jar
Incremental build support
Queryable lifecycle
comportement en fonction du lifecycle calculé au démarrage
n
Extensible reporting
eva
Continious integration (sonar, …)
, M010
New tools
-270
tycho : OSGi, Eclipse
0
z, 2
Integration continu
sen
Transféré vers Eclipse ?
o
r D
mvnsh : shell (performance)
ieidD
New IoD : Guice (annotation ?)
From Arnaud Heritier
52

29/03/2010
Bibliographie et Webographie
Web
Site Maven, http://maven.apache.org
Exemples et exercices
http://www-adele.imag.fr/users/Didier.Donsez/cours/tpmvn
Complément
http://www-adele.imag.fr/users/Didier.Donsez/cours/coursjavaoutil.pdf
neva
, M010-2700
z, 2seno
r DieidD
53

29/03/2010
Bibliographie et Webographie
http://maven.apache.org/articles.html
Ouvrages
Maven: The Definitive Guide
http://www.sonatype.com/book/maven-user-guide.pdf
En français http://www.maven-definitive-guide.fr/
John Casey, Vincent Massol, Brett Porter, Carlos Sanchez, Jason
van Zyl, Better Builds with Maven, Publisher Mergere Library Press,
March 2006
(PDF gratuit en ligne)
Vraiment bien, mais c’est préférable de connaître Maven auparavant !
Vincent Massol, Tim O'Brien, Maven: A Developer's Notebook,
neva
Publisher O'Reilly, July 2005
, M010-2
Une FAQ en francais
700
z, 2
http://java.developpez.com/faq/maven/
seno
Livre M2Eclipse en ligne
r Dieid
http://www.sonatype.com/m2eclipse/documentation/download-book?file=books/m2eclipse-book.pdf
D
54

29/03/2010
Exercice Développement d’un plugin
Développement d’un plugin pour Velocity
et DVSL (Declarative Velocity Style Language)
Questions
A quelles phases peut être appliqué ce plugin ?

neva
, M010-2700
z, 2seno
r DieidD
55

29/03/2010
Rappel sur Apache Velocity
Langage de templates (VTL)
Syntaxe proche des macros CPP
Macros #set, #foreach() ... #end, #if () …#elseif () …#else …#end, #include(…), #parse(…)
DVSL (Declarative Velocity Style Language) #match() ... #end
Variables $var ou ${var}
Usage
Génération de pages Web
Génération de codes sources (generative programming), …
Exemple VTL
// generated at $date
public static void main(String [] args) {
package ${pkgName};
Velocity.init();
public interface ${itfName}MBean {
VelocityContext vc = new VelocityContext();
#foreach ($attribute in ${attributesList})
vc.put("date", new Date());
/** setter for the attribute ${attribute} */
ne
vc.put("itfName", "Config"); …
va
public void set${attribute}(String new${attribute});
, M
Template template
0
/** getter for the attribute ${attribute} */
10
= Velocity.getTemplate(args[0]);
-2
public String get${attribute}();
700
OutputStreamWriter osw =
#end
z, 2
new StringWriter(System.out);
sen
/** reset al the attributes */
o
template.merge(vc, osw);
r D
public void reset();
ie
}
idD
}
56

Apache Maven 2
Publier sur Facebook Publier sur Twitter
Informations
Date : 08/10/2010
Langue : Français
Pages : 48
Consultations : 546
Commentaires : 0
Note :  
Résumé

Auteur : Didier Donsez


Description : Document sous licence CC: http://creativecommons.org/licenses/by-nc-nd/2.0/fr/. Apache Maven 2


Tags : Apache, Maven, tutoriel informatique, code, développement, archetypes, dépendances

Sur le même thème
Vues : 3407
Un logiciel libre de détection du plagiat
Pseudo : Marketmaker
Vues : 3407
Date : 04/12/2010
Pages : 20
Langue : Français
Description :
Présentation d'un logiciel libre de détection du plagiat. 2008 Creative Commons
Vues : 2745
Web Services : SOAP / WSDL / JAXWS / JAXB / SAAJ
Pseudo : Tutorrent
Vues : 2745
Date : 02/01/2011
Pages : 68
Langue : Français
Description :
Tutoriel web services. Creative Commons (http://creativecommons.org/licenses/by-sa/2.0/fr/)
Vues : 1513
PHP en entreprise - Livre blanc
Pseudo : TechnoFil
Vues : 1513
Date : 23/10/2010
Pages : 24
Langue : Français
Description :
Bien que concurrents dans leur activité quotidienne, des membres de l'AFUP, des experts PHP, .NET et J2EE se sont réunis pour...
Vues : 1462
The almost complete guide to creating menus in MODX using Wayfinder
Pseudo : SEOlover
Vues : 1462
Date : 15/11/2010
Pages : 148
Langue : Anglais
Description :
Document sous licence Creative commons.
Vues : 1447
Socket Programming - Tutoriel
Pseudo : TechnoFil
Vues : 1447
Date : 09/02/2011
Pages : 35
Langue : Anglais
Description :
Socket Programming.
Vues : 1438
Cours de PHP
Pseudo : Docenstoc
Vues : 1438
Date : 17/12/2010
Pages : 404
Langue : Français
Description :
Cours de PHP par le PHP Documentation Group. Ce manuel peut être redistribué sous licence GNU General Public License.
Du même contributeur
Vues : 1715
Java pour le développement d'applications Web
Pseudo : Docenstoc
Vues : 1715
Date : 08/10/2010
Pages : 175
Langue : Français
Description :
Document sous licence CC: http://creativecommons.org/licenses/by-sa/2.0/fr/. Java pour le développement d'applications Web.
Vues : 1474
Créer une table des matières sous OpenOffice
Pseudo : Docenstoc
Vues : 1474
Date : 13/12/2010
Pages : 11
Langue : Français
Description :
Dans la série Les tutoriels libres présentés par le site FRAMASOFT : Créer une table des matières sous OpenOffice....
Vues : 1438
Cours de PHP
Pseudo : Docenstoc
Vues : 1438
Date : 17/12/2010
Pages : 404
Langue : Français
Description :
Cours de PHP par le PHP Documentation Group. Ce manuel peut être redistribué sous licence GNU General Public License.
Vues : 1257
Introduction aux architectures n-tier
Pseudo : Docenstoc
Vues : 1257
Date : 08/12/2010
Pages : 7
Langue : Français
Description :
Cours d'introduction aux architectures n-tier dispensé à TELECOM Bretagne. Cours sous licence Creative Commons :...
Vues : 1214
Clients riches : les technologies du marché
Pseudo : Docenstoc
Vues : 1214
Date : 08/10/2010
Pages : 63
Langue : Français
Description :
Document sous licence CC: http://creativecommons.org/licenses/by-sa/2.0/fr/.
Vues : 1043
Méthodes de programmation systèmes
Pseudo : Docenstoc
Vues : 1043
Date : 13/12/2010
Pages : 258
Langue : Français
Description :
Méthodes de programmation systèmes par Emmanuel DESVIGNE. Document sous licence GNU/FDL.
Commentaires
Aucun commentaire pour cette publication
Ajouter un commentaire
Envoyer
Pour envoyer la page de votre document, notez ici les emails destinataires de votre demande :
Séparez les emails par des virgules
Signaler un abus
Vous devez vous connecter ou vous inscrire pour noter un document.
Cliquez ici pour vous inscrire.
Vous devez vous connecter ou vous inscrire pour ajouter un commentaire.
Cliquez ici pour vous inscrire.
Vous devez vous connecter ou vous inscrire pour envoyer le document.
Cliquez ici pour vous inscrire.
Vous ne pouvez pas acheter de documents sur Needocs.
Vous pouvez vous référer aux conditions générales de vente et d'achat du portail pour connaître les modalités d'achat.