SlideShare une entreprise Scribd logo
Maven 3 & 5
et Java 9, 10, …
par Hervé Boutemy
@hboutemy
@ ASFMavenProject
115/11/2018
Maven 3 & 5 et Java 9, 10, …
Au programme…
• Maven et Java 9, 10, …
• Maven 3 & 5
215/11/2018
Maven 3 & 5 et Java 9, 10, …
Qui je suis…
• Créateur de LogDistiller
• Committer Maven depuis 2007,
Maven PMC (Project Management Committee)
Maven PMC Chair de 2014 à 2016
• Membre de la Fondation Apache depuis 2011,
Apache Community Development, Apache Attic
• @hboutemy
• hboutemy@apache.org
315/11/2018
Maven 3 & 5 et Java 9, 10, …
Maven et Java 9, 10, …
Merci à Robert Scholte (Maven PMC Chair) pour ses slides
Et tout son travail dans le groupe d’experts JPMS…
415/11/2018
Maven 3 & 5 et Java 9, 10, …
Bonne Nouvelle !
5
• Apache Maven fonctionne parfaitement avec
Java 9
(et 10, et 11…)
• S’il y a des problèmes, c’est avec les plugins
mettre à jour avec les dernières versions
résoudra en général les difficultés
https://cwiki.apache.org/confluence/display/MAVEN/Java+9+-+Jigsaw
15/11/2018
Maven 3 & 5 et Java 9, 10, …
Transformer un module Maven
en module Java 9
1. Ajoutez un fichier module-info.java dans
src/main/java
2. Mettez à jour votre maven-compiler-plugin en
version 3.7.0 minimum
3. Il n’y a pas de point 3…
• Maven se charge de déduire quelles
dépendances vont dans le classpath et dans le
modulepath
• Pas besoin de nouvelles dépendances ou de
scope15/11/2018 6
Maven 3 & 5 et Java 9, 10, …
La collision de 2 mondes
15/11/2018 7
Maven Java <= 8
Public Review Ballot
2017-04-25 to 2017-05-08
Public Review Reconsideration Ballot
2017-06-13 to 2017-06-26
14 février 2017
Java is going nut’s
« On a tout cassé ton Java,
mais c'est pour ton bien,
je t'assure »
Java 9
Maven 3 & 5 et Java 9, 10, …
15/11/2018 8
• Librairies
les fournisseurs de librairies devraient être
conscients de l’impact de leurs descripteurs de
modules
• Applications
les producteurs d’applications devraient
reconnaître ces problématiques
Si vous ne faites pas attention lors de la modularisation,
vous pouvez corrompre l’ensemble de l’écosystème Maven
Maven 3 & 5 et Java 9, 10, …
Le nom des modules
• Comment choisir le nom de mon module ?
• Comment choisir mes groupId et artifactId ?
15/11/2018 9
Maven 3 & 5 et Java 9, 10, …
15/11/2018 10
• Noms de modules avec des nombres
• Noms automatiques de modules
Les noms de modules
doivent être aussi uniques que
les coordonnées des dépendances
Maven 3 & 5 et Java 9, 10, …
Noms de modules avec des nombres
15/11/2018 11
Some have argued that library maintainers
will be tempted to encode major version
numbers, or even full version numbers, in
module names.
Is there some way we can guide people
away from doing that?
Maven 3 & 5 et Java 9, 10, …
Noms de modules avec des nombres
15/11/2018 12
Noms de projets/produits
• AWS-EC2
• AWS-Route53
• AWS-S3
• C3P0
• DB2
• Fabric8
• H2
• JSRnnn
• OAuth2
Librairies versionnées
(contenant des packages
java versionnnés)
• Commons-lang2
• Commons-lang3
Librairies de liaison entre
des versions
• Jspc-compiler-tomcatN
• Mockwire-springN
• Surefire-junitN
Près de 30 000 groupId/artifactId finissent avec un nombre
(repository Central, mars 2017)
Maven 3 & 5 et Java 9, 10, …
#VersionsInModuleNames
15/11/2018 13
Resolution
Abandon the previous proposal to
mandate that module names appearing
in source-form module declarations
must both start and end with “Java
letters”. Revise the automatic-module
naming algorithm to allow digits at the
end of module names.
Maven 3 & 5 et Java 9, 10, …
Nom Automatique des Modules
“… . The module name is otherwise derived from
the name of the JAR file.”
15/11/2018 14
Maven 3 & 5 et Java 9, 10, …
15/11/2018 15
Un cas déjà vu dans le registry de packages JavaScript NPM:
Maven 3 & 5 et Java 9, 10, …
Preuve
(oct. 2016)
plus de
13 500
valeurs…
15/11/2018 16
Maven 3 & 5 et Java 9, 10, …
Analyse
• Librairies
Les fournisseurs de librairies ne devraient jamais référencer
des modules avec un nom automatique et déployer dans un
repository public.
• Applications
Les producteurs d’applications peuvent choisir de référencer
des modules avec un nom automatique.
15/11/2018 17
• Jigsaw
Les noms automatiques de
modules sont nécessaires
pour faciliter l’adoption sans
attendre la modularisation de
toutes les librairies
• Maven
Référencer des noms
automatiques de modules
causera des collisions tôt
ou tard
Maven 3 & 5 et Java 9, 10, …
Aide apportée par Maven
Astuce : Utilisez Maven 3.5.0+ pour bénéficier du
support des couleurs
15/11/2018 18
Applications
sans exports
Librairies
avec exportsDescripteurs de
modules
WARNINFO WARNINFO
Messages de log du
maven-compiler-plugin
en cas d’utilisation de
noms automatiques de
modules
Maven 3 & 5 et Java 9, 10, …
Noms automatiques de modules
• Objectif :
Faciliter la migration aux modules pour les
producteurs d’application sans attendre la
modularisation de toutes les dépendances
• Question :
Qu’en est-t’il des fournisseurs de librairies
« au milieu » ?
15/11/2018 19
Maven 3 & 5 et Java 9, 10, …
15/11/2018 20
Java Platform. It will be
approachable, i.e., easy to learn and
easy to use, so that developers can use
it to construct and maintain libraries and
large applications for both the Java SE
and Java EE Platforms.
JSR 376: JavaTM Platform Module System
Original Java Specification Request (JSR)
Section 2.1
large applications
Maven 3 & 5 et Java 9, 10, …
Exemple type lors des conférences
15/11/2018 21
Application my-app
Librairies jackson-core jackson-databind jackson-annotations my-lib
java.base
Maven 3 & 5 et Java 9, 10, …
Exemple plus proche de la réalité…
15/11/2018 22
Application my-app
Libraries
dépendances directes … … my-lib
dépendances transitives … …
dépendances finales jackson-core jackson-databind
java.base
Maven 3 & 5 et Java 9, 10, …
… avec en plus les facteurs
temps & organisation
15/11/2018 23
app-d
library-a
library-b library-c
Maven 3 & 5 et Java 9, 10, …
15/11/2018 24
1• library-a-1.0.jar
Maven 3 & 5 et Java 9, 10, …
15/11/2018 25
2• library-b-1.0.jar
module org.lib.b
{
requires library.a;
// from filename
}
Maven 3 & 5 et Java 9, 10, …
15/11/2018 26
3• library-a-2.0.jar
module com.lib.a
{
}
Maven 3 & 5 et Java 9, 10, …
15/11/2018 27
4• library-c-1.0.jar
module org.lib.c
{
requires com.lib.a;
// from descriptor
}
Maven 3 & 5 et Java 9, 10, …
15/11/2018 28
5• app-d-1.0.jar
module org.app.d
{
requires org.lib.b;
requires org.lib.c;
}
Maven 3 & 5 et Java 9, 10, …
15/11/2018 29
<project>
<groupId>com.company.d</groupId>
<artifactId>app-d</artifactId>
<version>1.0.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.organization.b</groupId>
<artifactId>library-b</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.foundation.c</groupId>
<artifactId>library-c</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
Maven 3 & 5 et Java 9, 10, …
15/11/2018 30
app-d.jar (org.app.d)
requires org.lib.b;
requires org.lib.c;
library-b-1.0.jar (org.lib.b)
requires library.a;
library-c-1.0.jar (org.lib.c)
requires com.lib.a;
Maven 3 & 5 et Java 9, 10, …
15/11/2018 31
app-d.jar (org.app.d)
requires org.lib.b;
requires org.lib.c;
library-b-1.0.jar (org.lib.b)
requires library.a;
library-a-1.0.jar
(library.a)
library-c-1.0.jar (org.lib.c)
requires com.lib.a;
library-a-2.0.jar
(com.lib.a)
Maven 3 & 5 et Java 9, 10, …
15/11/2018 32
<project>
<groupId>com.company.d</groupId>
<artifactId>app-d</artifactId>
<version>1.0.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.foundation.c</groupId>
<artifactId>library-c</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.organization.b</groupId>
<artifactId>library-b</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
Maven 3 & 5 et Java 9, 10, …
15/11/2018 33
app-d.jar (org.app.d)
requires org.lib.b;
requires org.lib.c;
library-c-1.0.jar (org.lib.c)
requires com.lib.a;
library-a-2.0.jar
(com.lib.a)
library-b-1.0.jar (org.lib.b)
requires library.a;
library-a-1.0.jar
(library.a)
Maven 3 & 5 et Java 9, 10, …
Préparer la migration aux modules
• META-INF/MANIFEST.MF
Automatic-Module-Name
Permet de choisir son futur nom de module au lieu
de subir un nom automatique basé sur le nom de
fichier, sans pour autant encore devenir un module
Java 9
nom automatique du module automatique
15/11/2018 34
choisi
Maven 3 & 5 et Java 9, 10, …
15/11/2018 35
2• library-a-1.1.jar
META-INF/MANIFEST.MF
Automatic-Module-Name: com.lib.a
Maven 3 & 5 et Java 9, 10, …
Le point de
non-retour
Si vous
référencez une
dépendance D:V
en tant que
module et que la
dépendance D:V-
1 n’a pas de nom
de module, alors
vous ne pouvez
plus retourner à
une version
précédente15/11/2018 36
Maven 3 & 5 et Java 9, 10, …
Conseils importants
• Passer aux modules nécessite d’être prêt :
– Pas de « split package »
– Pas de classes à la racine / sans package
• Pour les librairies qui dépendent au moins d’un
module dont le nom est déduit automatiquement du
nom de fichier :
– Aidez le fournisseur de la librairie en lui donnant un patch
pour qu’il configure le futur nom de module dans son
MANIFEST.MF
– Choisissez votre nom de module avec soin, souvent en
utilisant le nom de package Java partagé par toutes les
classes15/11/2018 37
Maven 3 & 5 et Java 9, 10, …
Les erreurs arrivent
• En fait, il y a déjà des modules invalides
dans le repository Central
– asm-6.0_BETA (org.ow2.asm)
– asm-all-6.0_BETA (org.ow2.asm.all) 1
– asm-debug-all-6.0_BETA
(org.ow2.asm.debug.all) 1
• Les développeurs d’application ne peuvent pas
régler le problème (l’exclusion de dépendance
est impuissante)
1 Résolu dans asm-6.0 en abandonnant tous les artefacts *-all
(asm garde les information debug par défaut)
15/11/2018 38
Même package
Même nom de module
(sinon risque de split
package)
Maven 3 & 5 et Java 9, 10, …
Astuces pour utiliser Java 9 avec
Maven
• NE CHANGEZ PAS votre structure de
répertoires
(pas besoin d’une structure de répertoire
supplémentaire avec le nom de module : Maven
travaille la ligne de commande pour s’en passer)
• Modulepath ou Classpath ?
Rien à faire dans les déclarations de
dépendance, ajoutez juste un module-
info.java
(la librairie plexus-java peut aider les fournisseurs de
plugin à construire ces path)15/11/2018 39
Maven 3 & 5 et Java 9, 10, …
Que faire en cas de problème ?
1. Stackoverflow
2. https://cwiki.apache.org/confluence/display/MAVEN/Java+9+-+Jigsaw
3. Mailing list Apache Maven
4. JIRA en cas de bugs ou d’améliorations à
apporter
15/11/2018 40
Maven 3 & 5 et Java 9, 10, …
Maven-compiler-plugin source / target 1.9
<release>9<release
>
source/target <= 1.8 : animal-sniffer ou toolchains
revoir notre talk Devoxx France 2015
https://fr.slideshare.net/aheritier/quand-java-prend-de-la-vitesse-apache-maven-vous-garde-15/11/2018 41
Maven 3 & 5 et Java 9, 10, …
Questions ?
4215/11/2018
Maven 3 & 5 et Java 9, 10, …
Est-ce que tous les projets peuvent
devenir modulaires ?
NON
• Java 9 change sérieusement la donne, introduit
de nouvelles règles
• Plus le code est vieux, moins il a de chances de
pouvoir suivre ces règles
• No stress, le classpath est toujours présent et il
le restera !
15/11/2018 43
Maven 3 & 5 et Java 9, 10, …
La question boomerang
Maven va-t’il générer
mon descripteur de module ?
15/11/2018 44
Maven 3 & 5 et Java 9, 10, …
Non
• Objectifs différents :
– POM = télécharger les jars pour les rendre disponibles
– Descripteur de module = décrire de façon fine les visibilités
de modules
• Eléments du descripteur de module non couverts :
– Nom du module
– Module ouvert
– Packages exportés
– Use / provide de services
• POM 4.0.0 n’a pas de place pour de nouveaux
éléments
15/11/2018 45
Maven 3 & 5 et Java 9, 10, …
Hygiène pour les POM
• dependency:analyze
Analyse les dépendences du projet courant et
détermine celles qui sont
• utilisées et déclarées (parfait)
• utilisées via les dépendances transitives et non
déclarées (parfait)
• inutilisées et déclarées (boom !)
Les dépendences peuvent être
exclues,
les modules requis ne peuvent pas
15/11/2018 46
Maven 3 & 5 et Java 9, 10, …
… mais JDEPS peut le faire, n’est-ce
pas ?
• Il peut créer un descripteur de module grossier
 Prévu pour aider à faire un descripteur initial
Remarque : utilise les classes compilées, donc
APRES la phase “compile”
• Des projets Open Source vont le faire…
https://github.com/moditect/moditect
15/11/2018 47
Maven 3 & 5 et Java 9, 10, …
Autres questions ?
4815/11/2018
Maven 3 & 5 et Java 9, 10, …
Merci !
4915/11/2018
Maven 3 & 5 et Java 9, 10, …
Maven 3 & 5
5015/11/2018
Maven 3 & 5 et Java 9, 10, …
Avertissements
• Tout ce qui suit n’est qu’une opinion personnelle
partagée avec quelques committers
• Il n’y a aucune roadmap figée :
– Comme tout projet Apache, il n’y a pas de société
« derrière » qui pilote : community first
• Les contributions sont les bienvenues
– Mailing lists, JIRA, Pull Requests
– Paris Hackergarten | Adopte un projet libre/open source
Meetup chaque dernier mardi du mois
@HckrgartenParis
15/11/2018 51
Maven 3 & 5 et Java 9, 10, …
La contribution à Maven
• Mailing lists
– users@maven.apache.org, dev@maven.apache.org
– announce@maven.apache.org
– https://lists.apache.org/list.html?maven.apache.org
• JIRA
• Migration de Subversion à Git
– Apache GitBox = multi-master avec GitHub
https://github.com/apache/maven*
15/11/2018 52
Maven 3 & 5 et Java 9, 10, …
De Subversion…
21 trunk
dont
• plugins : 44
• shared : 26
• …
15/11/2018 53
https://svn.apache.org/repos/asf/maven/trunks/
https://svn.apache.org/viewvc/maven/trunks/
Maven 3 & 5 et Java 9, 10, …
… à Git
• Plus de 100 repository Git…
• Utilisation de Google Repo:
15/11/2018 54
Maven 3 & 5 et Java 9, 10, …
Petit Bonus :
faciliter les contributions à la doc
• site.xml
<project>
<edit>${project.scm.url}</edit>
…
15/11/2018 55
GitHub edit / PR Jenkins
Svn
SvnPubSubSvnWcSub
Prérequis :
• maven-site-plugin >= 3.7
• Fluido skin >= 1.7
ou autre skin qui a intégré la
fonctionnalité
GitBox GitPubSub
Maven 3 & 5 et Java 9, 10, …
Où contribuer ?
Carte du code Maven
15/11/2018 56
Maven
CoreITs
Maven Plugins (~50)
• Core: clean, compiler, install, deploy, site, surefire, …
• Packaging: jar, war, shade, source, jlink, jmod, …
• Reporting: javadoc, jxr, checkstyle, pmd, jdeps, …
• Tools: archetype, assembly, enforcer, dependency, …
Maven Shared Components (~25)
archiver, dependency-tree, invoker,
reporting-api, reporting exec,
reporting-impl, …
Doxia
• base
• Sitetools
• Tools
Skins Parent POMs
Artifact Resolver
Plexus Components (~10)
archiver, cli, compiler,
interpolation, languages, …
Modello ClassworldsPlexus utils
Archetypes
Indexer
Central Repository
Maven 3 & 5 et Java 9, 10, …
De Maven 2…
15/11/2018 57
(2005)
Maven 3 & 5 et Java 9, 10, …
… à Maven 3.0 …
15/11/2018 58
(2010)
Maven 3 & 5 et Java 9, 10, …
… jusque Maven 3.5 …
15/11/2018 59
(2017)
Maven 3 & 5 et Java 9, 10, …
… et toujours notre bon vieux POM V4
• comme au début de Maven 2.0…
• Ou presque :
– scope import
– transitive dependency excludes (wildcard excludes)
– prerequisite (run time) vs enforcer (build time)
– properties : ${project.build.sourceEncoding}, …
15/11/2018 60
Central
Repository
Maven 3 & 5 et Java 9, 10, …
Relancer la capacité d’évolution
• POM V4 au cœur du repository Central => figé
15/11/2018 61
Format de build POM V4
POM V5
• Autres outils de build :
• Et si on faisait pareil ?
Build POM
Consumer POM
Maven 5 !!!
Maven 3 & 5 et Java 9, 10, …
Maven 5 : build vs consume ?
15/11/2018 62
Maven 3 & 5 et Java 9, 10, …
Prototype
• Maven 3 + POM V4 = build
POM V4 simplifié (<build>, <reporting>, …) = consumer
• flatten-maven-plugin
• Help Wanted !!!
pas forcément que coder : tester, discuter de l’expérience
développeur, partager des idées, …
15/11/2018 63
@HckrgartenParis
Maven 3 & 5 et Java 9, 10, …
Autres « Help Wanted »
• Reproducible Builds (Verifiable Builds)
• Incremental Build
• Check signature GPG
• Graphes divers…
• …
15/11/2018 64
@HckrgartenParis
Maven 3 & 5 et Java 9, 10, …
Tant qu’on parle de Central
• Encore en JDK 6 ?
• JDK 7u80 free Oracle ?
15/11/2018 65
Central
Repository
Maven 3 & 5 et Java 9, 10, …
Bonus : roadmap Java
Ce qui s’est passé après nos talks sur l’évolution de Java en 2015 :
• DevoxxFR : Quand Java prend de la vitesse, Apache Maven vous garde
sur les rails
• ApacheCON Europe: Java is evolving rapidly: Maven helps you staying on
track
15/11/2018 66
We’ll learn you how to juggle
Juggle with different Java
versions (JDKs, JREs)
To be able to use new
features from recent tools
And ensure compatibility
against production target
Java is 20 years old
Version First publication
JDK Alpha and Beta 1995
JDK 1.0 January, 1996
JDK 1.1 February, 1997
J2SE 1.2 (playground) December, 1998
J2SE 1.3 (kestrel) May, 2000
J2SE 1.4 (merlin) February, 2002
J2SE 5.0 (tiger) September, 2004
Java SE 6 (mustang) December, 2006
Java SE 7 (dolphin) July, 2011
Java SE 8 March, 2014
Java SE 9 Early 2016
6
7 8
15/11/2018 67
Java & Apache Maven Roadmaps:
2009
15/11/2018 68
Java & Apache Maven Roadmaps:
2009 …a little bit later…
15/11/2018 69
Java & Apache Maven Roadmaps:
early 2014
15/11/2018 70
Java & Apache Maven Roadmaps:
nowadays
Sources :
http://www.oracle.com/technetwork/java/eol-
135779.html
http://www.ibm.com/developerworks/java/jdk/lifecycle/
http://maven.apache.org/docs/history.html
15/11/2018 71
Maven 3 & 5 et Java 9, 10, …
Ce qui a changé entre 2015 et 2018
(ou pas, c’est juste qu’on comprend mieux…)
• Retard Java 9 => extension Java 8 public
Oracle Java SE 8 End of Public Updates : 1/2019
• Java 7+ est GPL avec OpenJDK
=> multiples fournisseurs de binaires :
AdoptOpenJDK, Azul, distributions Linux, …
Update != Support
Java Oracle
End of Public Update
OpenJDK
End of Public Update
7 4/2015: 7u80 6/2020
8 1/2019: 8u192* 6/2023
(*) octobre 2018, dernière avant janvier 2019 ?15/11/2018 72
Maven 3 & 5 et Java 9, 10, …
Le cas de la distribution Java 8
d’Oracle
• GA: 18/3/2014
• Oracle Java SE 8 End of Public Updates:
– Commercial User: 1/2019
– Personal User: 12/2020
• Oracle Java SE 8 Commercial Support:
– Premier Support Until: 3/2022
– Extended Support Until: 3/2025
15/11/2018 73
http://www.oracle.com/technetwork/java/eol-135779.html
1/2019 12/2020
3/2022
3/2025
Maven 3 & 5 et Java 9, 10, …
Java 9 : la nouvelle cadence
15/11/2018 74
9 10 11 12 13 14 15 16 17 18
LTS LTS
9/2017 3/2018 9/2018 3/2019 9/2019 3/2020 9/2020 3/2021 9/2021 3/2022
Oracle
OpenJDK RI
(GPLv2+CE)
Oracle’s OpenJDK
(GPLv2+CE)
Oracle JDK
(commercial,
free for dev use)
Autres fournisseurs OpenJDK
Free Binary Distributions
AdoptOpenJDK, Azul Zulu, Linux Distros
Commercial Support
Azul Systems, IBM, Red Hat
9.0.4 10.0.2 12.0.x 13.0.x 14.0.x 15.0.x 16.0.x
Maven 3 & 5 et Java 9, 10, …
Conclusion Bonus
• Java reste accessible gratuitement et à jour
(=updates)
avec support optionnel (payant)
7, 8, 11(LTS), 17(LTS), …
• Fournisseurs très diversifiés
• Mais attention à ne pas utiliser commercialement
un Java SE d’Oracle fourni publiquement
gratuitement pour usage personnel exclusivement
– Oracle Java SE 8 après janvier 2019, càd > 8u192*
– Oracle Java SE 9, 10, 11, …
– Oracle OpenJDK 11 après mars 2019 (sortie de Java 12)
15/11/2018 75
https://www.javaspecialists.eu/archive/Issue260.html
(*) version à confirmer
Maven 3 & 5 et Java 9, 10, …
Conclusion
7615/11/2018
@HckrgartenParis
Maven 3 & 5 et Java 9, 10, …
Questions ?
7715/11/2018
Maven 3 & 5 et Java 9, 10, …
Merci !
7815/11/2018

Contenu connexe

Tendances

Lyon JUG 2018 - Java le changement c'est maintenant
Lyon JUG 2018 - Java le changement c'est maintenantLyon JUG 2018 - Java le changement c'est maintenant
Lyon JUG 2018 - Java le changement c'est maintenant
Jean-Michel Doudoux
 
Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018
Jean-Michel Doudoux
 
Anniversaire Paris JUG - Deja 10 ans - retour vers le futur avec JMX
Anniversaire Paris JUG -  Deja 10 ans - retour vers le futur avec JMXAnniversaire Paris JUG -  Deja 10 ans - retour vers le futur avec JMX
Anniversaire Paris JUG - Deja 10 ans - retour vers le futur avec JMX
Jean-Michel Doudoux
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
Arnaud Héritier
 
Présentation Maven
Présentation MavenPrésentation Maven
Présentation MavenSOAT
 
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Ippon
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon
Ippon
 
Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8
Jean-Michel Doudoux
 
Presentation Rex Methodes Agiles
Presentation Rex Methodes AgilesPresentation Rex Methodes Agiles
Presentation Rex Methodes Agiles
Ippon
 
Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)
Jérôme Tamborini
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Ippon
 
JCertif 2012 : Maven par la pratique
JCertif 2012 : Maven par la pratiqueJCertif 2012 : Maven par la pratique
JCertif 2012 : Maven par la pratique
Rossi Oddet
 
Maven
MavenMaven
Quand java prend de la vitesse, apache maven vous garde sur les rails
Quand java prend de la vitesse, apache maven vous garde sur les railsQuand java prend de la vitesse, apache maven vous garde sur les rails
Quand java prend de la vitesse, apache maven vous garde sur les rails
Arnaud Héritier
 
Java 11 to 17 : What's new !?
Java 11 to 17 : What's new !?Java 11 to 17 : What's new !?
Java 11 to 17 : What's new !?
Jérôme Tamborini
 
Présentation1
Présentation1Présentation1
Présentation1
Boulkenafet samir
 
Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014
Ippon
 
Spring Batch - concepts de base
Spring Batch - concepts de baseSpring Batch - concepts de base
Spring Batch - concepts de base
Spring User Group France
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache Maven
Arnaud Héritier
 
Spring 3 en production
Spring 3 en productionSpring 3 en production
Spring 3 en production
Julien Dubois
 

Tendances (20)

Lyon JUG 2018 - Java le changement c'est maintenant
Lyon JUG 2018 - Java le changement c'est maintenantLyon JUG 2018 - Java le changement c'est maintenant
Lyon JUG 2018 - Java le changement c'est maintenant
 
Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018
 
Anniversaire Paris JUG - Deja 10 ans - retour vers le futur avec JMX
Anniversaire Paris JUG -  Deja 10 ans - retour vers le futur avec JMXAnniversaire Paris JUG -  Deja 10 ans - retour vers le futur avec JMX
Anniversaire Paris JUG - Deja 10 ans - retour vers le futur avec JMX
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
 
Présentation Maven
Présentation MavenPrésentation Maven
Présentation Maven
 
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon
 
Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8
 
Presentation Rex Methodes Agiles
Presentation Rex Methodes AgilesPresentation Rex Methodes Agiles
Presentation Rex Methodes Agiles
 
Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
 
JCertif 2012 : Maven par la pratique
JCertif 2012 : Maven par la pratiqueJCertif 2012 : Maven par la pratique
JCertif 2012 : Maven par la pratique
 
Maven
MavenMaven
Maven
 
Quand java prend de la vitesse, apache maven vous garde sur les rails
Quand java prend de la vitesse, apache maven vous garde sur les railsQuand java prend de la vitesse, apache maven vous garde sur les rails
Quand java prend de la vitesse, apache maven vous garde sur les rails
 
Java 11 to 17 : What's new !?
Java 11 to 17 : What's new !?Java 11 to 17 : What's new !?
Java 11 to 17 : What's new !?
 
Présentation1
Présentation1Présentation1
Présentation1
 
Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014
 
Spring Batch - concepts de base
Spring Batch - concepts de baseSpring Batch - concepts de base
Spring Batch - concepts de base
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache Maven
 
Spring 3 en production
Spring 3 en productionSpring 3 en production
Spring 3 en production
 

Similaire à 2018.11.15 Lyon JUG Maven 3&5 et java 9

Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Jean-Michel Doudoux
 
Programmation Java
Programmation JavaProgrammation Java
Programmation Java
Mohamed Lahby
 
Meet up paris 13 of jun 2017
Meet up paris 13 of jun 2017Meet up paris 13 of jun 2017
Meet up paris 13 of jun 2017
Jasmine Conseil
 
Maven
MavenMaven
Octo Maven.pdf
Octo Maven.pdfOcto Maven.pdf
Octo Maven.pdf
badrfathallah2
 
Nouveautés Java 9-10-11
Nouveautés Java 9-10-11Nouveautés Java 9-10-11
Nouveautés Java 9-10-11
Mahamadou TOURE, Ph.D.
 
0251-formation-java-programmation-objet.pdf
0251-formation-java-programmation-objet.pdf0251-formation-java-programmation-objet.pdf
0251-formation-java-programmation-objet.pdf
Ombotimbe Salifou
 
Distribuer une librairie via maven
Distribuer une librairie via mavenDistribuer une librairie via maven
Distribuer une librairie via maven
Franck SIMON
 
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdfdevoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
Jean-Michel Doudoux
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?
Antoine Rey
 
Esupdays 19 : Packaging Esup Cas
Esupdays 19 : Packaging Esup Cas Esupdays 19 : Packaging Esup Cas
Esupdays 19 : Packaging Esup Cas
Ludovic A
 
Maven et industrialisation du logiciel
Maven et industrialisation du logicielMaven et industrialisation du logiciel
Maven et industrialisation du logiciel
ENSET, Université Hassan II Casablanca
 
Alphorm.com support de la formation Drupal 8 webmaster configurateur
Alphorm.com support de la formation Drupal 8 webmaster configurateurAlphorm.com support de la formation Drupal 8 webmaster configurateur
Alphorm.com support de la formation Drupal 8 webmaster configurateur
Alphorm
 
Rouabhi algiers meetup
Rouabhi algiers meetupRouabhi algiers meetup
Rouabhi algiers meetup
Samir Rouabhi
 
20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation Maven20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation Maven
Arnaud Héritier
 
Distribuer Framework LabVIEW Personnalise par Luc Desruelle
Distribuer Framework LabVIEW Personnalise par Luc DesruelleDistribuer Framework LabVIEW Personnalise par Luc Desruelle
Distribuer Framework LabVIEW Personnalise par Luc Desruelle
Luc Desruelle
 
.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?
Rui Carvalho
 
SLIDES-625.1.1-IDL-4-build tools maven.pdf
SLIDES-625.1.1-IDL-4-build tools maven.pdfSLIDES-625.1.1-IDL-4-build tools maven.pdf
SLIDES-625.1.1-IDL-4-build tools maven.pdf
ArouNa3
 

Similaire à 2018.11.15 Lyon JUG Maven 3&5 et java 9 (20)

Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
 
Programmation Java
Programmation JavaProgrammation Java
Programmation Java
 
Meet up paris 13 of jun 2017
Meet up paris 13 of jun 2017Meet up paris 13 of jun 2017
Meet up paris 13 of jun 2017
 
Maven
MavenMaven
Maven
 
Octo Maven.pdf
Octo Maven.pdfOcto Maven.pdf
Octo Maven.pdf
 
Nouveautés Java 9-10-11
Nouveautés Java 9-10-11Nouveautés Java 9-10-11
Nouveautés Java 9-10-11
 
0251-formation-java-programmation-objet.pdf
0251-formation-java-programmation-objet.pdf0251-formation-java-programmation-objet.pdf
0251-formation-java-programmation-objet.pdf
 
Distribuer une librairie via maven
Distribuer une librairie via mavenDistribuer une librairie via maven
Distribuer une librairie via maven
 
gradle_nantesjug
gradle_nantesjuggradle_nantesjug
gradle_nantesjug
 
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdfdevoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?
 
Esupdays 19 : Packaging Esup Cas
Esupdays 19 : Packaging Esup Cas Esupdays 19 : Packaging Esup Cas
Esupdays 19 : Packaging Esup Cas
 
Maven et industrialisation du logiciel
Maven et industrialisation du logicielMaven et industrialisation du logiciel
Maven et industrialisation du logiciel
 
Alphorm.com support de la formation Drupal 8 webmaster configurateur
Alphorm.com support de la formation Drupal 8 webmaster configurateurAlphorm.com support de la formation Drupal 8 webmaster configurateur
Alphorm.com support de la formation Drupal 8 webmaster configurateur
 
Rouabhi algiers meetup
Rouabhi algiers meetupRouabhi algiers meetup
Rouabhi algiers meetup
 
20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation Maven20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation Maven
 
Gradle_ToursJUG
Gradle_ToursJUGGradle_ToursJUG
Gradle_ToursJUG
 
Distribuer Framework LabVIEW Personnalise par Luc Desruelle
Distribuer Framework LabVIEW Personnalise par Luc DesruelleDistribuer Framework LabVIEW Personnalise par Luc Desruelle
Distribuer Framework LabVIEW Personnalise par Luc Desruelle
 
.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?
 
SLIDES-625.1.1-IDL-4-build tools maven.pdf
SLIDES-625.1.1-IDL-4-build tools maven.pdfSLIDES-625.1.1-IDL-4-build tools maven.pdf
SLIDES-625.1.1-IDL-4-build tools maven.pdf
 

2018.11.15 Lyon JUG Maven 3&5 et java 9

  • 1. Maven 3 & 5 et Java 9, 10, … par Hervé Boutemy @hboutemy @ ASFMavenProject 115/11/2018
  • 2. Maven 3 & 5 et Java 9, 10, … Au programme… • Maven et Java 9, 10, … • Maven 3 & 5 215/11/2018
  • 3. Maven 3 & 5 et Java 9, 10, … Qui je suis… • Créateur de LogDistiller • Committer Maven depuis 2007, Maven PMC (Project Management Committee) Maven PMC Chair de 2014 à 2016 • Membre de la Fondation Apache depuis 2011, Apache Community Development, Apache Attic • @hboutemy • hboutemy@apache.org 315/11/2018
  • 4. Maven 3 & 5 et Java 9, 10, … Maven et Java 9, 10, … Merci à Robert Scholte (Maven PMC Chair) pour ses slides Et tout son travail dans le groupe d’experts JPMS… 415/11/2018
  • 5. Maven 3 & 5 et Java 9, 10, … Bonne Nouvelle ! 5 • Apache Maven fonctionne parfaitement avec Java 9 (et 10, et 11…) • S’il y a des problèmes, c’est avec les plugins mettre à jour avec les dernières versions résoudra en général les difficultés https://cwiki.apache.org/confluence/display/MAVEN/Java+9+-+Jigsaw 15/11/2018
  • 6. Maven 3 & 5 et Java 9, 10, … Transformer un module Maven en module Java 9 1. Ajoutez un fichier module-info.java dans src/main/java 2. Mettez à jour votre maven-compiler-plugin en version 3.7.0 minimum 3. Il n’y a pas de point 3… • Maven se charge de déduire quelles dépendances vont dans le classpath et dans le modulepath • Pas besoin de nouvelles dépendances ou de scope15/11/2018 6
  • 7. Maven 3 & 5 et Java 9, 10, … La collision de 2 mondes 15/11/2018 7 Maven Java <= 8 Public Review Ballot 2017-04-25 to 2017-05-08 Public Review Reconsideration Ballot 2017-06-13 to 2017-06-26 14 février 2017 Java is going nut’s « On a tout cassé ton Java, mais c'est pour ton bien, je t'assure » Java 9
  • 8. Maven 3 & 5 et Java 9, 10, … 15/11/2018 8 • Librairies les fournisseurs de librairies devraient être conscients de l’impact de leurs descripteurs de modules • Applications les producteurs d’applications devraient reconnaître ces problématiques Si vous ne faites pas attention lors de la modularisation, vous pouvez corrompre l’ensemble de l’écosystème Maven
  • 9. Maven 3 & 5 et Java 9, 10, … Le nom des modules • Comment choisir le nom de mon module ? • Comment choisir mes groupId et artifactId ? 15/11/2018 9
  • 10. Maven 3 & 5 et Java 9, 10, … 15/11/2018 10 • Noms de modules avec des nombres • Noms automatiques de modules Les noms de modules doivent être aussi uniques que les coordonnées des dépendances
  • 11. Maven 3 & 5 et Java 9, 10, … Noms de modules avec des nombres 15/11/2018 11 Some have argued that library maintainers will be tempted to encode major version numbers, or even full version numbers, in module names. Is there some way we can guide people away from doing that?
  • 12. Maven 3 & 5 et Java 9, 10, … Noms de modules avec des nombres 15/11/2018 12 Noms de projets/produits • AWS-EC2 • AWS-Route53 • AWS-S3 • C3P0 • DB2 • Fabric8 • H2 • JSRnnn • OAuth2 Librairies versionnées (contenant des packages java versionnnés) • Commons-lang2 • Commons-lang3 Librairies de liaison entre des versions • Jspc-compiler-tomcatN • Mockwire-springN • Surefire-junitN Près de 30 000 groupId/artifactId finissent avec un nombre (repository Central, mars 2017)
  • 13. Maven 3 & 5 et Java 9, 10, … #VersionsInModuleNames 15/11/2018 13 Resolution Abandon the previous proposal to mandate that module names appearing in source-form module declarations must both start and end with “Java letters”. Revise the automatic-module naming algorithm to allow digits at the end of module names.
  • 14. Maven 3 & 5 et Java 9, 10, … Nom Automatique des Modules “… . The module name is otherwise derived from the name of the JAR file.” 15/11/2018 14
  • 15. Maven 3 & 5 et Java 9, 10, … 15/11/2018 15 Un cas déjà vu dans le registry de packages JavaScript NPM:
  • 16. Maven 3 & 5 et Java 9, 10, … Preuve (oct. 2016) plus de 13 500 valeurs… 15/11/2018 16
  • 17. Maven 3 & 5 et Java 9, 10, … Analyse • Librairies Les fournisseurs de librairies ne devraient jamais référencer des modules avec un nom automatique et déployer dans un repository public. • Applications Les producteurs d’applications peuvent choisir de référencer des modules avec un nom automatique. 15/11/2018 17 • Jigsaw Les noms automatiques de modules sont nécessaires pour faciliter l’adoption sans attendre la modularisation de toutes les librairies • Maven Référencer des noms automatiques de modules causera des collisions tôt ou tard
  • 18. Maven 3 & 5 et Java 9, 10, … Aide apportée par Maven Astuce : Utilisez Maven 3.5.0+ pour bénéficier du support des couleurs 15/11/2018 18 Applications sans exports Librairies avec exportsDescripteurs de modules WARNINFO WARNINFO Messages de log du maven-compiler-plugin en cas d’utilisation de noms automatiques de modules
  • 19. Maven 3 & 5 et Java 9, 10, … Noms automatiques de modules • Objectif : Faciliter la migration aux modules pour les producteurs d’application sans attendre la modularisation de toutes les dépendances • Question : Qu’en est-t’il des fournisseurs de librairies « au milieu » ? 15/11/2018 19
  • 20. Maven 3 & 5 et Java 9, 10, … 15/11/2018 20 Java Platform. It will be approachable, i.e., easy to learn and easy to use, so that developers can use it to construct and maintain libraries and large applications for both the Java SE and Java EE Platforms. JSR 376: JavaTM Platform Module System Original Java Specification Request (JSR) Section 2.1 large applications
  • 21. Maven 3 & 5 et Java 9, 10, … Exemple type lors des conférences 15/11/2018 21 Application my-app Librairies jackson-core jackson-databind jackson-annotations my-lib java.base
  • 22. Maven 3 & 5 et Java 9, 10, … Exemple plus proche de la réalité… 15/11/2018 22 Application my-app Libraries dépendances directes … … my-lib dépendances transitives … … dépendances finales jackson-core jackson-databind java.base
  • 23. Maven 3 & 5 et Java 9, 10, … … avec en plus les facteurs temps & organisation 15/11/2018 23 app-d library-a library-b library-c
  • 24. Maven 3 & 5 et Java 9, 10, … 15/11/2018 24 1• library-a-1.0.jar
  • 25. Maven 3 & 5 et Java 9, 10, … 15/11/2018 25 2• library-b-1.0.jar module org.lib.b { requires library.a; // from filename }
  • 26. Maven 3 & 5 et Java 9, 10, … 15/11/2018 26 3• library-a-2.0.jar module com.lib.a { }
  • 27. Maven 3 & 5 et Java 9, 10, … 15/11/2018 27 4• library-c-1.0.jar module org.lib.c { requires com.lib.a; // from descriptor }
  • 28. Maven 3 & 5 et Java 9, 10, … 15/11/2018 28 5• app-d-1.0.jar module org.app.d { requires org.lib.b; requires org.lib.c; }
  • 29. Maven 3 & 5 et Java 9, 10, … 15/11/2018 29 <project> <groupId>com.company.d</groupId> <artifactId>app-d</artifactId> <version>1.0.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.organization.b</groupId> <artifactId>library-b</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>org.foundation.c</groupId> <artifactId>library-c</artifactId> <version>1.0</version> </dependency> </dependencies> </project>
  • 30. Maven 3 & 5 et Java 9, 10, … 15/11/2018 30 app-d.jar (org.app.d) requires org.lib.b; requires org.lib.c; library-b-1.0.jar (org.lib.b) requires library.a; library-c-1.0.jar (org.lib.c) requires com.lib.a;
  • 31. Maven 3 & 5 et Java 9, 10, … 15/11/2018 31 app-d.jar (org.app.d) requires org.lib.b; requires org.lib.c; library-b-1.0.jar (org.lib.b) requires library.a; library-a-1.0.jar (library.a) library-c-1.0.jar (org.lib.c) requires com.lib.a; library-a-2.0.jar (com.lib.a)
  • 32. Maven 3 & 5 et Java 9, 10, … 15/11/2018 32 <project> <groupId>com.company.d</groupId> <artifactId>app-d</artifactId> <version>1.0.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.foundation.c</groupId> <artifactId>library-c</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>org.organization.b</groupId> <artifactId>library-b</artifactId> <version>1.0</version> </dependency> </dependencies> </project>
  • 33. Maven 3 & 5 et Java 9, 10, … 15/11/2018 33 app-d.jar (org.app.d) requires org.lib.b; requires org.lib.c; library-c-1.0.jar (org.lib.c) requires com.lib.a; library-a-2.0.jar (com.lib.a) library-b-1.0.jar (org.lib.b) requires library.a; library-a-1.0.jar (library.a)
  • 34. Maven 3 & 5 et Java 9, 10, … Préparer la migration aux modules • META-INF/MANIFEST.MF Automatic-Module-Name Permet de choisir son futur nom de module au lieu de subir un nom automatique basé sur le nom de fichier, sans pour autant encore devenir un module Java 9 nom automatique du module automatique 15/11/2018 34 choisi
  • 35. Maven 3 & 5 et Java 9, 10, … 15/11/2018 35 2• library-a-1.1.jar META-INF/MANIFEST.MF Automatic-Module-Name: com.lib.a
  • 36. Maven 3 & 5 et Java 9, 10, … Le point de non-retour Si vous référencez une dépendance D:V en tant que module et que la dépendance D:V- 1 n’a pas de nom de module, alors vous ne pouvez plus retourner à une version précédente15/11/2018 36
  • 37. Maven 3 & 5 et Java 9, 10, … Conseils importants • Passer aux modules nécessite d’être prêt : – Pas de « split package » – Pas de classes à la racine / sans package • Pour les librairies qui dépendent au moins d’un module dont le nom est déduit automatiquement du nom de fichier : – Aidez le fournisseur de la librairie en lui donnant un patch pour qu’il configure le futur nom de module dans son MANIFEST.MF – Choisissez votre nom de module avec soin, souvent en utilisant le nom de package Java partagé par toutes les classes15/11/2018 37
  • 38. Maven 3 & 5 et Java 9, 10, … Les erreurs arrivent • En fait, il y a déjà des modules invalides dans le repository Central – asm-6.0_BETA (org.ow2.asm) – asm-all-6.0_BETA (org.ow2.asm.all) 1 – asm-debug-all-6.0_BETA (org.ow2.asm.debug.all) 1 • Les développeurs d’application ne peuvent pas régler le problème (l’exclusion de dépendance est impuissante) 1 Résolu dans asm-6.0 en abandonnant tous les artefacts *-all (asm garde les information debug par défaut) 15/11/2018 38 Même package Même nom de module (sinon risque de split package)
  • 39. Maven 3 & 5 et Java 9, 10, … Astuces pour utiliser Java 9 avec Maven • NE CHANGEZ PAS votre structure de répertoires (pas besoin d’une structure de répertoire supplémentaire avec le nom de module : Maven travaille la ligne de commande pour s’en passer) • Modulepath ou Classpath ? Rien à faire dans les déclarations de dépendance, ajoutez juste un module- info.java (la librairie plexus-java peut aider les fournisseurs de plugin à construire ces path)15/11/2018 39
  • 40. Maven 3 & 5 et Java 9, 10, … Que faire en cas de problème ? 1. Stackoverflow 2. https://cwiki.apache.org/confluence/display/MAVEN/Java+9+-+Jigsaw 3. Mailing list Apache Maven 4. JIRA en cas de bugs ou d’améliorations à apporter 15/11/2018 40
  • 41. Maven 3 & 5 et Java 9, 10, … Maven-compiler-plugin source / target 1.9 <release>9<release > source/target <= 1.8 : animal-sniffer ou toolchains revoir notre talk Devoxx France 2015 https://fr.slideshare.net/aheritier/quand-java-prend-de-la-vitesse-apache-maven-vous-garde-15/11/2018 41
  • 42. Maven 3 & 5 et Java 9, 10, … Questions ? 4215/11/2018
  • 43. Maven 3 & 5 et Java 9, 10, … Est-ce que tous les projets peuvent devenir modulaires ? NON • Java 9 change sérieusement la donne, introduit de nouvelles règles • Plus le code est vieux, moins il a de chances de pouvoir suivre ces règles • No stress, le classpath est toujours présent et il le restera ! 15/11/2018 43
  • 44. Maven 3 & 5 et Java 9, 10, … La question boomerang Maven va-t’il générer mon descripteur de module ? 15/11/2018 44
  • 45. Maven 3 & 5 et Java 9, 10, … Non • Objectifs différents : – POM = télécharger les jars pour les rendre disponibles – Descripteur de module = décrire de façon fine les visibilités de modules • Eléments du descripteur de module non couverts : – Nom du module – Module ouvert – Packages exportés – Use / provide de services • POM 4.0.0 n’a pas de place pour de nouveaux éléments 15/11/2018 45
  • 46. Maven 3 & 5 et Java 9, 10, … Hygiène pour les POM • dependency:analyze Analyse les dépendences du projet courant et détermine celles qui sont • utilisées et déclarées (parfait) • utilisées via les dépendances transitives et non déclarées (parfait) • inutilisées et déclarées (boom !) Les dépendences peuvent être exclues, les modules requis ne peuvent pas 15/11/2018 46
  • 47. Maven 3 & 5 et Java 9, 10, … … mais JDEPS peut le faire, n’est-ce pas ? • Il peut créer un descripteur de module grossier  Prévu pour aider à faire un descripteur initial Remarque : utilise les classes compilées, donc APRES la phase “compile” • Des projets Open Source vont le faire… https://github.com/moditect/moditect 15/11/2018 47
  • 48. Maven 3 & 5 et Java 9, 10, … Autres questions ? 4815/11/2018
  • 49. Maven 3 & 5 et Java 9, 10, … Merci ! 4915/11/2018
  • 50. Maven 3 & 5 et Java 9, 10, … Maven 3 & 5 5015/11/2018
  • 51. Maven 3 & 5 et Java 9, 10, … Avertissements • Tout ce qui suit n’est qu’une opinion personnelle partagée avec quelques committers • Il n’y a aucune roadmap figée : – Comme tout projet Apache, il n’y a pas de société « derrière » qui pilote : community first • Les contributions sont les bienvenues – Mailing lists, JIRA, Pull Requests – Paris Hackergarten | Adopte un projet libre/open source Meetup chaque dernier mardi du mois @HckrgartenParis 15/11/2018 51
  • 52. Maven 3 & 5 et Java 9, 10, … La contribution à Maven • Mailing lists – users@maven.apache.org, dev@maven.apache.org – announce@maven.apache.org – https://lists.apache.org/list.html?maven.apache.org • JIRA • Migration de Subversion à Git – Apache GitBox = multi-master avec GitHub https://github.com/apache/maven* 15/11/2018 52
  • 53. Maven 3 & 5 et Java 9, 10, … De Subversion… 21 trunk dont • plugins : 44 • shared : 26 • … 15/11/2018 53 https://svn.apache.org/repos/asf/maven/trunks/ https://svn.apache.org/viewvc/maven/trunks/
  • 54. Maven 3 & 5 et Java 9, 10, … … à Git • Plus de 100 repository Git… • Utilisation de Google Repo: 15/11/2018 54
  • 55. Maven 3 & 5 et Java 9, 10, … Petit Bonus : faciliter les contributions à la doc • site.xml <project> <edit>${project.scm.url}</edit> … 15/11/2018 55 GitHub edit / PR Jenkins Svn SvnPubSubSvnWcSub Prérequis : • maven-site-plugin >= 3.7 • Fluido skin >= 1.7 ou autre skin qui a intégré la fonctionnalité GitBox GitPubSub
  • 56. Maven 3 & 5 et Java 9, 10, … Où contribuer ? Carte du code Maven 15/11/2018 56 Maven CoreITs Maven Plugins (~50) • Core: clean, compiler, install, deploy, site, surefire, … • Packaging: jar, war, shade, source, jlink, jmod, … • Reporting: javadoc, jxr, checkstyle, pmd, jdeps, … • Tools: archetype, assembly, enforcer, dependency, … Maven Shared Components (~25) archiver, dependency-tree, invoker, reporting-api, reporting exec, reporting-impl, … Doxia • base • Sitetools • Tools Skins Parent POMs Artifact Resolver Plexus Components (~10) archiver, cli, compiler, interpolation, languages, … Modello ClassworldsPlexus utils Archetypes Indexer Central Repository
  • 57. Maven 3 & 5 et Java 9, 10, … De Maven 2… 15/11/2018 57 (2005)
  • 58. Maven 3 & 5 et Java 9, 10, … … à Maven 3.0 … 15/11/2018 58 (2010)
  • 59. Maven 3 & 5 et Java 9, 10, … … jusque Maven 3.5 … 15/11/2018 59 (2017)
  • 60. Maven 3 & 5 et Java 9, 10, … … et toujours notre bon vieux POM V4 • comme au début de Maven 2.0… • Ou presque : – scope import – transitive dependency excludes (wildcard excludes) – prerequisite (run time) vs enforcer (build time) – properties : ${project.build.sourceEncoding}, … 15/11/2018 60 Central Repository
  • 61. Maven 3 & 5 et Java 9, 10, … Relancer la capacité d’évolution • POM V4 au cœur du repository Central => figé 15/11/2018 61 Format de build POM V4 POM V5 • Autres outils de build : • Et si on faisait pareil ? Build POM Consumer POM Maven 5 !!!
  • 62. Maven 3 & 5 et Java 9, 10, … Maven 5 : build vs consume ? 15/11/2018 62
  • 63. Maven 3 & 5 et Java 9, 10, … Prototype • Maven 3 + POM V4 = build POM V4 simplifié (<build>, <reporting>, …) = consumer • flatten-maven-plugin • Help Wanted !!! pas forcément que coder : tester, discuter de l’expérience développeur, partager des idées, … 15/11/2018 63 @HckrgartenParis
  • 64. Maven 3 & 5 et Java 9, 10, … Autres « Help Wanted » • Reproducible Builds (Verifiable Builds) • Incremental Build • Check signature GPG • Graphes divers… • … 15/11/2018 64 @HckrgartenParis
  • 65. Maven 3 & 5 et Java 9, 10, … Tant qu’on parle de Central • Encore en JDK 6 ? • JDK 7u80 free Oracle ? 15/11/2018 65 Central Repository
  • 66. Maven 3 & 5 et Java 9, 10, … Bonus : roadmap Java Ce qui s’est passé après nos talks sur l’évolution de Java en 2015 : • DevoxxFR : Quand Java prend de la vitesse, Apache Maven vous garde sur les rails • ApacheCON Europe: Java is evolving rapidly: Maven helps you staying on track 15/11/2018 66
  • 67. We’ll learn you how to juggle Juggle with different Java versions (JDKs, JREs) To be able to use new features from recent tools And ensure compatibility against production target Java is 20 years old Version First publication JDK Alpha and Beta 1995 JDK 1.0 January, 1996 JDK 1.1 February, 1997 J2SE 1.2 (playground) December, 1998 J2SE 1.3 (kestrel) May, 2000 J2SE 1.4 (merlin) February, 2002 J2SE 5.0 (tiger) September, 2004 Java SE 6 (mustang) December, 2006 Java SE 7 (dolphin) July, 2011 Java SE 8 March, 2014 Java SE 9 Early 2016 6 7 8 15/11/2018 67
  • 68. Java & Apache Maven Roadmaps: 2009 15/11/2018 68
  • 69. Java & Apache Maven Roadmaps: 2009 …a little bit later… 15/11/2018 69
  • 70. Java & Apache Maven Roadmaps: early 2014 15/11/2018 70
  • 71. Java & Apache Maven Roadmaps: nowadays Sources : http://www.oracle.com/technetwork/java/eol- 135779.html http://www.ibm.com/developerworks/java/jdk/lifecycle/ http://maven.apache.org/docs/history.html 15/11/2018 71
  • 72. Maven 3 & 5 et Java 9, 10, … Ce qui a changé entre 2015 et 2018 (ou pas, c’est juste qu’on comprend mieux…) • Retard Java 9 => extension Java 8 public Oracle Java SE 8 End of Public Updates : 1/2019 • Java 7+ est GPL avec OpenJDK => multiples fournisseurs de binaires : AdoptOpenJDK, Azul, distributions Linux, … Update != Support Java Oracle End of Public Update OpenJDK End of Public Update 7 4/2015: 7u80 6/2020 8 1/2019: 8u192* 6/2023 (*) octobre 2018, dernière avant janvier 2019 ?15/11/2018 72
  • 73. Maven 3 & 5 et Java 9, 10, … Le cas de la distribution Java 8 d’Oracle • GA: 18/3/2014 • Oracle Java SE 8 End of Public Updates: – Commercial User: 1/2019 – Personal User: 12/2020 • Oracle Java SE 8 Commercial Support: – Premier Support Until: 3/2022 – Extended Support Until: 3/2025 15/11/2018 73 http://www.oracle.com/technetwork/java/eol-135779.html 1/2019 12/2020 3/2022 3/2025
  • 74. Maven 3 & 5 et Java 9, 10, … Java 9 : la nouvelle cadence 15/11/2018 74 9 10 11 12 13 14 15 16 17 18 LTS LTS 9/2017 3/2018 9/2018 3/2019 9/2019 3/2020 9/2020 3/2021 9/2021 3/2022 Oracle OpenJDK RI (GPLv2+CE) Oracle’s OpenJDK (GPLv2+CE) Oracle JDK (commercial, free for dev use) Autres fournisseurs OpenJDK Free Binary Distributions AdoptOpenJDK, Azul Zulu, Linux Distros Commercial Support Azul Systems, IBM, Red Hat 9.0.4 10.0.2 12.0.x 13.0.x 14.0.x 15.0.x 16.0.x
  • 75. Maven 3 & 5 et Java 9, 10, … Conclusion Bonus • Java reste accessible gratuitement et à jour (=updates) avec support optionnel (payant) 7, 8, 11(LTS), 17(LTS), … • Fournisseurs très diversifiés • Mais attention à ne pas utiliser commercialement un Java SE d’Oracle fourni publiquement gratuitement pour usage personnel exclusivement – Oracle Java SE 8 après janvier 2019, càd > 8u192* – Oracle Java SE 9, 10, 11, … – Oracle OpenJDK 11 après mars 2019 (sortie de Java 12) 15/11/2018 75 https://www.javaspecialists.eu/archive/Issue260.html (*) version à confirmer
  • 76. Maven 3 & 5 et Java 9, 10, … Conclusion 7615/11/2018 @HckrgartenParis
  • 77. Maven 3 & 5 et Java 9, 10, … Questions ? 7715/11/2018
  • 78. Maven 3 & 5 et Java 9, 10, … Merci ! 7815/11/2018

Notes de l'éditeur

  1. GPL v2 + Classpath Exception