Select your language > /

Java: Générer des exécutables Windows, Linux et MacOS

Au profit d'un programme type "ligne de commande", avec Maven

Le 12/12/2022

Si comme moi tu en as assez de faire des programmes types “ligne de commande” en Java et d’être obligé de les lancer avec ce genre de choses :

$ java -jar demo-app-v1.0.0-SNAPSHOT.jar arg1 arg2 arg3`

Ce petit article devrait te plaire. Tu pourras alors faire directement ça :

$ ./demo-app arg1 arg2 arg3

Appétissant !

Dans ce petit tutoriel, je vais donc générer un exécutable :

  • pour Linux et MacOSX,
  • pour Windows, un .EXE,
  • sous forme de Runnable JAR, classique.

Cela nécessite toutefois la présence d’un Runtime JAVA (JRE et/ou JDK) sur la machine qui l’exécutera, bien qu’il existe aussi des solutions pour embarquer un JRE.

Les solutions, que je vais décrire, n’utilisent pas GRAALVM et sa compilation native.

REST API avec Quarkus, JPA, PostGreSQL et GraalVM

réduire l'empreinte serveur d'une API REST en JAVA en la compilant en code natif !

Le 16/04/2020

Ce tutoriel Quarkus-JPA-PostgreSQL met en oeuvre :

  • une API Rest partielle (GET) avec JAX-RS et Quarkus sur une source de données JPA
  • des tests unitaires
  • des tests d’intégration au niveau API (http) avec un PostGreSQL lancé par un plugin maven Docker
  • une distribution native, compilée avec GraalVM et une image docker de l’application compilée

Réalisé sous Linux Mint 19 mais devrait convenir à de nombreuses distributions, voire à Windows.

Functional Switch/Case en Java 8 et +

parce que le nouveau Switch/Case de Java 12 m'a donné cette idée saugrenue

Le 26/02/2020

Java 12 est sorti le 20/03/19, apportant une nouvelle façon d’écrire des structures de contrôle switch/case. Cela m’a donné une idée, certes un peu étrange, de revoir le traditionnel switch/case d’un point de vue programmation fonctionnelle en s’appuyant sur des lambdas et une petite classe Switch, le tout en JAVA 8 !

Attention toutefois, il est certain que cette approche est beaucoup moins performante qu’un switch/case classique, mais je ne renonce pas à la beauté du geste.

Versions de cet article :

  • 04/10/2019 : première publication.
  • 26/02/2020 : suite à idée judicieuse postée sur les forums “developpez.com”, voir la partie “Let’s go further …”

Repenser son style de codage

du code, pour qui, pourquoi ?

Le 30/08/2018

Cela fait des années que je place différemment mes accolades { }, à contre-courant de ce qui se fait généralement en Java, faisant ainsi ressembler mon code à du C/C++. Ce billet est l’occasion de faire une sorte d’introspection sur ma pratique : Est-elle bonne ? Est-elle désuète ? Pourquoi je n’aime pas le style SUN ? Est-ce que mon style est utile ou inutile ?

Que de questions auxquelles ce billet va tenter de répondre.

Le singleton est mort, vive le singleton !

Encore un post sur le Singleton ?

Le 06/08/2018
  • Version 1 parue le 16/12/2017
  • Version 2 parue le 06/08/2018 : accès concurrents, PermGen / Meta spaces, Holder interne

L’objectif de ce billet est de présenter une implémentation simple en Java du pattern Singleton.

Je ne traiterai donc pas de l’utilité ni des recommandations d’usage liées à celui-ci mais bien de mise en oeuvre (codage pour les intimes) en Java Standard Edition (JSE).

Découverte de Deltaspike Data Module

avec CDI 2.0, Weld 3, JUnit 5, JPA 2.2, EclipseLink 2.7, H2 et Lombok

Le 21/06/2018

Cet article va vous permettre de découvrir Deltaspike Data Module, une alternative à Spring Data dans le monde CDI et dans notre cas en CDI 2.0.

Cette accroche est parlante pour ceux qui connaissent Spring Data mais peut-être pas pour les autres : Deltaspike Data va permettre d’avoir très simplement une fonctionnalité de CRUD (Create, Read, Update, Delete) sur des entités JPA et bien plus encore en vous faisant économiser énormément de temps de développement et de bugs potentiels !

Préconditions des méthodes d'une API

Parce qu'il faudrait toujours vérifier les arguments

Le 02/06/2018

Comme tout système s’appuyant sur des inputs, il est très important de contrôler les arguments des méthodes quand on élabore une API, qu’elle soit locale sous forme de JAR ou distante via un service REST, afin de non seulement la rendre plus robuste et stable mais aussi de se prémunir de certaines attaques.

Cependant, en Java de base, c’est particulièrement laborieux, rébarbatif et cela engendre une fainéantise exacerbée. Conséquences directes et désastreuses : baisse de la qualité, de la robustesse du code et créations potentielles de failles de sécurité.

Cet article tente de faire le tour de la question, sans prétention, en ratissant assez large. C’est à dire en allant de Java classique jusqu’à Bean Validation et JAX-RS, en passant par une implémentation spécifique “Faite Maison”.

Serveur minimal HTTP avec JShell en Java_10

Histoire de troller sur NodeJS versus Java

Le 23/04/2018

NodeJS se targue de pouvoir monter en quelques lignes de code un simple serveur HTTP. Effectivement, créer ce genre de serveur est vraiment simple et particulièrement utile pour du déploiement dans le Cloud.

Et Java dans tout ça ? A la traîne ? Has-Been ?

“Si à 50 ans t’as pas de Rolex et/ou si tu sais pas faire de TypeScript, t’as raté ta vie !”

Fort heureusement, je vais vous montrer qu’avec JShell, apparu avec Java 9, en 10 lignes de code environ, vous obtiendrez un serveur HTTP Asynchrone, performant, en ayant à portée de main tout ce que vous offre Java 10, ses modules, ainsi qu’historiquement, toutes les bibliothèques JAR de son écosystème !

Apache Archiva sur Raspberry PI

pour centraliser ses artefacts et autres archetypes ...

Le 14/04/2018

Il me faut un repo Maven dédié !”. Voilà ce qui m’est venu en tête quand j’ai dû changer de machine récemment alors que tous les artefacts maven que je produisais étaient capitalisés dans le .m2/repository de mon home. Autant dire “Pas capitalisés”.

Bien sûr, j’utilise un repo Nexus au boulot mais je change d’activité et je vais devenir plus mobile, il me faut donc une solution.

J’aurais pu prendre une image Docker et la déployer sur AWS ou équivalent : la solution de facilité qui demande toutefois un peu de “ressource” financière.

Et je le vois, là, rose, toutes diodes allumées, connecté à ma box, servant de proxy Squid de temps en temps. Mon Raspberry PI 1, je l’entends encore me dire “Moi je peux, moi je peux, moi je peux !” en trépignant dans son joli boitier.

Contribuer à l'Eclipse Foundation : DONE

plutôt que d'attendre en pestant sur sa chaise ...

Le 02/04/2018

Comme tout bon développeur Java, je suis un gros consommateur des solutions fournies par l’Eclipse Foundation. Je ne vais en citer que quelques-unes : Eclipse IDE, EclipseLink, Eclipse GlassFish, Jetty, Eclipse EGit, Eclipse Maven Integration, etc.

Il était donc temps, au lieu d’attendre en ronchonnant qu’un patch ne soit développé, de contribuer en fournissant un correctif à un projet.

Xenon Reborn, développer en s'amusant et réciproquement

Ou comment apprendre à coder en réalisant un jeu vidéo ...

Le 14/03/2018

Dans mon parcours professionnel, j’ai été formateur de jeunes développeurs pendant sept années. Ces derniers venaient d’horizons différents, parfois sans aucune compétence en terme de programmation.

Afin de rendre ludique l’apprentissage des fondamentaux de l’algorithmique et de Java, je les ai fait participer à la création d’un jeu video : Xenon Reborn, inspiré du célèbre jeu Xenon des Bitmap Brothers.