Bonjour,
Prochainement, je vais intégrer une nouvelle mission qui repartira "from scratch".
Je me pose des question d'architecture, mais également de construction.
A tout instant, je dois pouvoir construire le projet, indépendamment de l'environnement de développement, mais aussi du système d'exploitation.
Sachant que l'on doit durer, et s'adapter aux nouvelles JVM, la question se pose de partir du JDK 10.
Certains pensent qu'il faut partir du JDK 8, mais je ne suis pas d'accord.
Il vaut mieux épargner un travail de migration du JDK 8 au JDK 9/10.
Et comme on doit mettre à jour le projet pour qu'il puisse prendre le dernier JDK, je pense qu'il faut partir du JDK 10.
Voici donc ma question:
En Java 8, l'architecture du projet est, en résumé, la suivante:
J'ai identifié les différentes couches, les différents JAR et les dépendances.
Notez que l'on a, par couche, un JAR contrat (Interface + Template Method) et un JAR d'implémentation.
Ce choix permet:
- Une implémentation pour différentes cibles (BDD, SOLR...) vu que le contrat peut rester le même (CRUD par exemple)
- De tirer les JAR dans d'autre projets (Client lourd, chaîne de traitement ...)
L'ensemble du projet est construit par Maven.
On a un projet parent, et chaque projet hérite du parent (avec les dépendances indiquées).
On ajoute éventuellement d'autres JAR externes (Spring, JSF, Hibernate...)
Seulement, avec Java 9, et donc par extension, Java 10, on a une JVM modulaire.
On a plus des JAR, mais des jmod.
Je me dis donc que si on veut se plier à la philosophie Oracle (à partir de Java 9) et que l'on veut s'adapter aux futures JVM, il faut fabriquer des jmod.
Le schéma, très proche du précédent est donc le suivant:
Le WAR reste pour un serveur (comme Tomcat).
Les JAR ne sont autorisées que si elles sont extérieure au système (Spring, Hibernate...).
Ce qui m'amène la question suivante: Est-il possible, Dans la pratique, d'automatiser ça par un outil de build, et comment?
On est Maven, il y a un plugin qui fait des jmod (https://maven.apache.org/plugins/maven-jmod-plugin/) mais c'est une pré-realease.
Maven reste-t-il pertinent?
Si non, par quoi le remplacer?
Gradle est-il plus adapté?
Merci de vos retours.
Partager