Bonjour

Régulièrement je vois dans les projets de astuces pour obtenir à l'exécution des informations du projet maven.
le plus souvent la version et le build time.

Pour cela en java on fait un fichier de propriétés dans main/resources qui est filtré et qui va donc contenir les propriétés requises dans le jar.
à l'exécution ce fichier est lu et on obtient alors dans des variables les valeurs souhaitées.

Je remarque souvent que ces valeurs peuvent facilement êtres surchargées à l'exécution. (c'est le fichier de config de l'appli qui est utilisé.)

Je me suis souvent dit que ce serait mieux d'avoir une classe de constante.
mais pour faire ça il faut
  1. Ajouter un dossier contenant le "modèle" du code source.
  2. Filtrer ce modèle à la phase generate-sources.
  3. Ajouter la classe généré au classPath pour qu'elle soit compilée.


Cela fait un bon paquet de xml pour un résultat très minime.
les quelques fois où je l'ai vu en oeuvre les développeurs se trompaient souvent de fichier.
ils éditaient le fichier généré à la place du fichier modèle.

Du coup je me suis dit qu'un simple plugin devait faire l'affaire.
un petit ajout du plugin à sont projet et c'est fini.

Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
        <plugin>
            <groupId>org.sekaijin</groupId>
            <artifactId>constants-maven-plugin</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <executions>
                <execution>
                    <id>constants</id>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

pour ajouter un constante ou surcharger les constantes pas défaut.
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
<properties>
    <constant.my.actifact>${project.artifactId}-${project.version}</constant.my.actifact>
    <constant.version>${project.version}-${project.artifactId}</constant.version>
</properties>
et on obtient
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
package com.sap.conn;
 
public class SapJco3
{
	public static final String FULL_NAME ="SAP :: JCO :: 3";
	public static final String NAME ="sapjco3";
	public static final String BUILD ="2020-12-05 17:12:20 CET";
	public static final String MY_ARTIFACT ="sapjco3-3.0.0";
	public static final String VERSION ="3.0.0-sapjco3";
} //class

Tout est donc fait à la compilation. il ne peut y avoir d'altérations. Et il n'y a rien à exécuter au runtime.

https://github.com/sekaijin/constants-maven-plugin/
Ce plugin est très simple (je n'ai pas mis le fichier généré en lecture seule par exemple)
mais sur ce principe on pourrait générer des fichier de constantes dans n'importe quel langage supporté par maven.

A+JYT