vidocq-runtime-maven-plugin est le plugin Maven qui transforme une application en binaire déployable autonome. Il expose quatre goals : build, jlink, jpackage, docker. Voir aussi vidocq/JLINK.md pour le détail interne.
Coordonnées
Artefact |
|
Module JPMS |
|
Goals
| Goal | Rôle |
|---|---|
|
Exécute le graphe topologique des |
|
Image Java autonome ( |
|
Bundle natif OS ( |
|
Génère |
Goal vidocq:jlink
<plugin>
<groupId>io.vidocq.runtime</groupId>
<artifactId>vidocq-runtime-maven-plugin</artifactId>
<executions>
<execution>
<id>jlink</id>
<goals><goal>jlink</goal></goals>
<configuration>
<mainModule>com.example.myapp</mainModule>
<mainClass>com.example.myapp.MainApp</mainClass>
<launcher>my-app</launcher>
<distDir>${project.build.directory}/dist</distDir>
<stripDebug>true</stripDebug>
<compress>zip-6</compress>
<includeResources>
<param>vidocq.properties</param>
<param>logging.properties</param>
</includeResources>
</configuration>
</execution>
</executions>
</plugin>
Sortie type :
target/
├── dist/
│ ├── bin/my-app # launcher binaire
│ ├── conf/ # config surchargeable (ExternalFileConfigSource)
│ │ ├── vidocq.properties
│ │ └── logging.properties
│ ├── lib/ # modules JPMS app + JDK
│ ├── legal/
│ └── release
├── installer/ # si jpackage activé
│ └── my-app.app/
└── Dockerfile # si docker activé
Goal vidocq:jpackage
Réutilise l’image jlink produite. Type par défaut : app-image (cross-platform). Sur macOS, .app. Sur Windows, .exe ou .msi. Sur Linux, .deb ou .rpm.
Voir vidocq/JLINK.md §3 pour la liste exhaustive des paramètres.
Goal vidocq:docker
Génère un Dockerfile distroless. Pourquoi distroless/base-debian12:nonroot ?
-
pas de shell, pas de package manager — surface d’attaque minimale ;
-
utilisateur
nonroot(UID 65532) imposé ; -
compatible avec les politiques d’image les plus strictes.
./mvnw -ntp package -Dvidocq.docker.build=true
docker run --rm -p 8080:8080 example/my-app:1.0.0
# Avec config externe
docker run --rm -p 8080:8080 \
-e VIDOCQ_CONFIG_DIR=/etc/myapp \
-v $(pwd)/conf:/etc/myapp:ro \
example/my-app:1.0.0
Surcharge externe (ExternalFileConfigSource)
vidocq.properties placé dans ${java.home}/conf/ (image jlink) ou pointé par $VIDOCQ_CONFIG_DIR est lu avec ordinal 250. Voir Référence pour la hiérarchie complète.
Pré-requis et limitations
-
JPMS strict — toutes les dépendances doivent être des modules nommés. Un jar sans
module-info.classniAutomatic-Module-Namecassejlink. -
Records sérialisés via REST — Champollion les gère par génération APT, pas par réflexion. Si une dépendance externe expose des records non générés, déclarer un
Converter<T>JSON-B. -
Custom
java.util.loggingHandler — déclarer le module danslogging.propertiespour quejlinkl’embarque (handlers=com.example.MyHandler). -
macOS app-image — le bundle nécessite
--app-versionvalide ; le plugin défaute à la version Maven du projet.
Voir vidocq/JLINK.md §6 et §8 pour la liste complète des limitations connues.