Utiliser maven pour sortir le numéro de version dans un fichier texte

Je veux générer un fichier zip qui mettra à jour une application avec maven. Le zip sera hébergé sur un serveur et j’utilise le plugin assembly pour générer le zip. Cependant, je voudrais que maven génère automatiquement un fichier texte qui stocke le numéro de version actuel en dehors du zip. Est-ce possible?

EDIT: Je l’ai fait avec succès en utilisant le plugin Maven Assembly et deux descripteurs pour créer deux assemblages personnalisés. L’un a un objective unique et crée simplement un dossier avec la version.txt mise à jour basée sur le filtrage. Ensuite, un autre avec un seul objective compresse réellement le fichier zip. Cela semble être très inélégant et je suppose qu’il ne sera pas correctement mis à jour avec le dossier mis à jour. S’il existe un meilleur moyen de le faire, faites-le moi savoir.

    Sûr. Créez un fichier texte quelque part dans src / main / resources, appelez-le version.txt (ou autre)

    Contenu du fichier:

     ${project.version} 

    maintenant dans votre pom.xml, à l’intérieur de l’élément build, mettez ce bloc:

        src/main/resources true  **/version.txt    src/main/resources false  **/version.txt   ...   

    Après chaque construction, le fichier (que vous pouvez trouver dans target / classes) contiendra la version actuelle.

    Maintenant, si vous voulez déplacer le fichier ailleurs automatiquement, vous devrez probablement exécuter une tâche ant via le plug-in maven-antrun .

    Quelque chose comme ça:

       ...   maven-antrun-plugin 1.4   process-resources       run       

    Utilisez la norme META-INF\MANIFEST.MF (vous pouvez alors utiliser le code Java getClass().getPackage().getImplementationVersion() pour obtenir la version)

    Pour .war, utilisez cette configuration:

      maven-war-plugin 2.1    true true     

    Cela va append un manifeste lors de la construction, ou vous pouvez appeler mvn war:manifest

    Voir aussi Comment obtenir la version du package lors de l’exécution de Tomcat?

    Ce à quoi vous faites référence s’appelle le filtrage

    Vous devez activer le filtrage sur une ressource particulière, puis utiliser ${project.version} qui sera substitué dans le cadre de votre construction.

    Vous pouvez également utiliser un script Groovy pour produire un fichier d’informations de version. J’aime plus cette méthode car vous n’avez pas à exclure des choses dans le descripteur du plugin Assembly. Vous pouvez également utiliser cette méthode pour inclure éventuellement des éléments uniquement disponibles si vous construisez à partir de Jenkins / Hudson (par exemple, vérifiez le oug BUILD_ID etc …).

    Vous auriez donc un script groovy de génération de fichiers dans pom.xml comme ceci:

       org.codehaus.mojo.groovy groovy-maven-plugin 1.0-beta-3   test  execute          

    Et puis votre plugin d’assemblage plugin dans pom.xml qui ressemblerait à ceci:

       maven-assembly-plugin 2.2.1    all package  single   ${project.artifactId}  dist-all.xml      

    Et enfin, votre descripteur d’assemblage dist-all.xml ressemblerait à ceci:

       all  dir zip  false   target   *.jar    src/main/conf   **     

    dans Maven 3, utilisez la réponse de Sean pour créer votre fichier version.txt , (le mien est montré ici, avec la date de construction et le profil actif):

     ${project.version}-${profileID} ${buildDate} 

    append la propriété profileID à chacun des profils, par exemple:

      profileName  

    Utilisez les ressources de copie Maven pour copier le fichier dans un répertoire plus facile à atteindre, tel que ${basedir} ou ${basedir}/target :

      org.apache.maven.plugins maven-resources-plugin 3.0.2   copy-resources validate  copy-resources   ${basedir}   ${basedir}/target/.../[version.txt dir]/version.txt  version.txt  true       

    sortie ressemble à ceci:

     1.2.3-profileName yymmdd_hhmm 

    Je viens de le faire avec une tâche de fourmi.

     ${project.version} 

    Une possibilité consiste à stocker toutes les propriétés du projet dans le .jar intégré à l’aide de maven-properties-plugin .
    Ensuite, vous pouvez lire ces propriétés en utilisant l’ API Java Properties standard (mais pas trop pratique).

        org.codehaus.mojo properties-maven-plugin 1.0.0   generate-resources  write-project-properties    ${project.build.outputDirectory}/build.properties      

    Soyez prudent avec cette approche car il peut y avoir des propriétés qui ne sont pas censées être publiées, également à partir de settings.xml .

    Pour append à la réponse de Sean, vous pouvez déplacer le fichier de version vers un emplacement de dossier dans le fichier JAR en utilisant le paramètre targetpath dans la ressource. Le code suivant crée un dossier appelé ‘resources’ dans le fichier jar et le fichier texte (version.number) se trouve dans ce dossier.

      resources resources true  version.number    resources false  version.number