Versions plugin Maven

De EjnTricks

Tous les projets Maven se basent sur trois informations.

  • groupId pour regrouper le projet dans un group;
  • artifactId pour identifier le projet;
  • version pour identifier la version du projet.

Pour des projets complexes, essentiellement multi modules, il peut devenir compliquer de gérer les numéros de version.

Cet article présente des utilisations du plugin versions-maven-plugin qui permet d'automatiser les opérations.

Les exemples décrits sont disponibles sous ce lien : http://www.svn.jouvinio.net/study/trunk/maven/versions-maven-plugin

Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Study icon.png Etude

Pour les besoins de l'article, un projet multi modules est créé afin d'illustrer les actions sur le projet parent et les fils.

Le projet parent versions-parent permet de référencer les modules fils mais également les plugins / dépendances utilisées.


Robot-icon.png Gestion version projet

Sur cet exemple, le numéro de version est spécifié avec la valeur 0.0.1-SNAPSHOT au niveau du projet parent. Dans le cas d'une montée de version, il est nécessaire de modifier la valeur au niveau du fichier pom.xml du projet parent, mais également sur les projets fils.

Update icon.png Changement version

Le goal set avec l'argument newVersion, pour spécifier le numéro de version souhaité, permet de réaliser la mise à jour sur depuis le projet parent et tous les sous modules déclarés. Dans l'exemple suivant, les modules sont mis à jour avec la version 1.0.

#mvn versions:set -DnewVersion=1.0
.
.
.
[INFO] ------------------------------------------------------------------------
[INFO] Building Study Versions plugin 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- versions-maven-plugin:2.5:set (default-cli) @ versions-parent ---
[INFO] Searching for local aggregator root...
[INFO] Local aggregation root: C:\workspaces\studyMaven\versions-maven-plugin\versions-parent
[INFO] Processing change of fr.ejn.tutorial.maven:versions-parent:0.0.1-SNAPSHOT -> 1.0
[INFO] Processing fr.ejn.tutorial.maven:versions-parent
[INFO]     Updating project fr.ejn.tutorial.maven:versions-parent
[INFO]         from version 0.0.1-SNAPSHOT to 1.0
[INFO] 
[INFO] Processing fr.ejn.tutorial.maven:versions-child-1
[INFO]     Updating parent fr.ejn.tutorial.maven:versions-parent
[INFO]         from version 0.0.1-SNAPSHOT to 1.0
[INFO] 
[INFO] Processing fr.ejn.tutorial.maven:versions-child-2
[INFO]     Updating parent fr.ejn.tutorial.maven:versions-parent
[INFO]         from version 0.0.1-SNAPSHOT to 1.0
.
.
.

A noter que cette action entraîne la création de fichier pom.xml.versionsBackup, copies des fichiers pom.xml avant modification, pour tous les éléments du projet. Ainsi en cas d'erreur, il est facile de revenir à la situation initiale.

Dans le cadre de l'utilisation de SNAPSHOT, il est possible d'incrémenter automatiquement le numéro de version d'une unité, sans avoir à spécifier la valeur à l'aide de l'argument nextSnapshot/<code>.

#mvn versions:set -DnextSnapshot=true
.
.
.
[INFO] ------------------------------------------------------------------------
[INFO] Building Study Versions plugin 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- versions-maven-plugin:2.5:set (default-cli) @ versions-parent ---
[INFO] SNAPSHOT found.  BEFORE 0.0.1-SNAPSHOT  --> AFTER: 0.0.2-SNAPSHOT
[INFO] Searching for local aggregator root...
[INFO] Local aggregation root: C:\workspaces\studyMaven\versions-maven-plugin\versions-parent
[INFO] Processing change of fr.ejn.tutorial.maven:versions-parent:0.0.1-SNAPSHOT -> 0.0.2-SNAPSHOT
[INFO] Processing fr.ejn.tutorial.maven:versions-parent
[INFO]     Updating project fr.ejn.tutorial.maven:versions-parent
[INFO]         from version 0.0.1-SNAPSHOT to 0.0.2-SNAPSHOT
[INFO] 
[INFO] Processing fr.ejn.tutorial.maven:versions-child-1
[INFO]     Updating parent fr.ejn.tutorial.maven:versions-parent
[INFO]         from version 0.0.1-SNAPSHOT to 0.0.2-SNAPSHOT
[INFO] 
[INFO] Processing fr.ejn.tutorial.maven:versions-child-2
[INFO]     Updating parent fr.ejn.tutorial.maven:versions-parent
[INFO]         from version 0.0.1-SNAPSHOT to 0.0.2-SNAPSHOT
.
.
.

Save-icon.png Validation mise à jour

En cas de succès, les fichiers <code>pom.xml.versionsBackup ne sont plus nécessaire. Il serait possible de les supprimer manuellement, mais cela devient vite fastidieux. Pour ce faire, le goal commit est utilisé. La commande suivante permet alors de valider les modifications réalisées dans le précédent paragraphe.

#mvn versions:commit
.
.
.
[INFO] ------------------------------------------------------------------------
[INFO] Building Study Versions plugin 1.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- versions-maven-plugin:2.5:commit (default-cli) @ versions-parent ---
[INFO] Accepting all changes to C:\workspaces\studyMaven\versions-maven-plugin\versions-parent\pom.xml
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Versions child 1 1.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- versions-maven-plugin:2.5:commit (default-cli) @ versions-child-1 ---
[INFO] Accepting all changes to C:\workspaces\studyMaven\versions-maven-plugin\versions-child1\pom.xml
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Versions child 2 1.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- versions-maven-plugin:2.5:commit (default-cli) @ versions-child-2 ---
[INFO] Accepting all changes to C:\workspaces\studyMaven\versions-maven-plugin\versions-child2\pom.xml
.
.
.

Backup-restore.png Annulation mise à jour

Il existe également la commande inverse qui va permettre d'annuler les modifications, par restauration des fichiers pom.xml.versionsBackup en pom.xml, à l'aide du goal revert. La commande suivante permet alors d' annuler les modifications réalisées dans le précédent paragraphe.

#mvn versions:revert
.
.
.
[INFO] ------------------------------------------------------------------------
[INFO] Building Study Versions plugin 1.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- versions-maven-plugin:2.5:revert (default-cli) @ versions-parent ---
[INFO] Restoring C:\workspaces\studyMaven\versions-maven-plugin\versions-parent\pom.xml from C:\workspaces\studyMaven\versions-maven-plugin\versions-parent\pom.xml.versionsBackup
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Versions child 1 1.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- versions-maven-plugin:2.5:revert (default-cli) @ versions-child-1 ---
[INFO] Restoring C:\workspaces\studyMaven\versions-maven-plugin\versions-child1\pom.xml from C:\workspaces\studyMaven\versions-maven-plugin\versions-child1\pom.xml.versionsBackup
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Versions child 2 1.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- versions-maven-plugin:2.5:revert (default-cli) @ versions-child-2 ---
[INFO] Restoring C:\workspaces\studyMaven\versions-maven-plugin\versions-child2\pom.xml from C:\workspaces\studyMaven\versions-maven-plugin\versions-child2\pom.xml.versionsBackup
.
.
.

Process-Icon.png Modification sans backup

Dans des cas non risqués, et d'autant plus si le projet est sur un gestionnaire de source, la génération des copies de sauvegardes n'est pas nécessaire. Pour cela, il faut utiliser l'argument generateBackupPoms pour effectuer directement les modifications, comme dans la commande suivante.

#mvn versions:set -DnewVersion=1.0 -DgenerateBackupPoms=false
.
.
.
[INFO] ------------------------------------------------------------------------
[INFO] Building Study Versions plugin 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- versions-maven-plugin:2.5:set (default-cli) @ versions-parent ---
[INFO] Searching for local aggregator root...
[INFO] Local aggregation root: C:\workspaces\studyMaven\versions-maven-plugin\versions-parent
[INFO] Processing change of fr.ejn.tutorial.maven:versions-parent:0.0.1-SNAPSHOT -> 1.0
[INFO] Processing fr.ejn.tutorial.maven:versions-parent
[INFO]     Updating project fr.ejn.tutorial.maven:versions-parent
[INFO]         from version 0.0.1-SNAPSHOT to 1.0
[INFO] 
[INFO] Processing fr.ejn.tutorial.maven:versions-child-1
[INFO]     Updating parent fr.ejn.tutorial.maven:versions-parent
[INFO]         from version 0.0.1-SNAPSHOT to 1.0
[INFO] 
[INFO] Processing fr.ejn.tutorial.maven:versions-child-2
[INFO]     Updating parent fr.ejn.tutorial.maven:versions-parent
[INFO]         from version 0.0.1-SNAPSHOT to 1.0
.
.
.


Icon Folder analyze.png Recherche mises à jour

Les projets Maven permettent de déclarer des dépendances sur des librairies tierces et de référencer des plugins pour exécuter les actions. Dans les deux cas, ceux-ci peuvent être mis à jour et il ce plugin permet de vérifier la présence de nouvelle versions.

Jar format icon.png Dépendances

Le cas le plus courant concerne la recherche de mises à jour sur les dépendances. Le goal display-dependency-updates va permettre d'afficher un listing sur les dépendances déclarées pour lesquelles une nouvelle version est disponible. Pour cet exemple, la librairie commons-collections4, déclarée dans la section dependencyManagement du projet parent, est volontairement obsolète. De la même façon, la dépendance commons-io déclarée dans le module versions-child-1 est obsolète.

La vérification des versions produit le listing suivant.

#mvn versions:display-dependency-updates
.
.
.
[INFO] ------------------------------------------------------------------------
[INFO] Building Study Versions plugin 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- versions-maven-plugin:2.5:display-dependency-updates (default-cli) @ versions-parent ---
[INFO] The following dependencies in Dependency Management have newer versions:
[INFO]   org.apache.commons:commons-collections4 ..................... 4 -> 4.1
[INFO] 
[INFO] No dependencies in Dependencies have newer versions.
[INFO] 
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Versions child 1 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- versions-maven-plugin:2.5:display-dependency-updates (default-cli) @ versions-child-1 ---
[INFO] The following dependencies in Dependency Management have newer versions:
[INFO]   org.apache.commons:commons-collections4 ..................... 4 -> 4.1
[INFO] 
[INFO] The following dependencies in Dependencies have newer versions:
[INFO]   commons-io:commons-io ..................................... 2.5 -> 2.6
[INFO] 
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Versions child 2 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- versions-maven-plugin:2.5:display-dependency-updates (default-cli) @ versions-child-2 ---
[INFO] The following dependencies in Dependency Management have newer versions:
[INFO]   org.apache.commons:commons-collections4 ..................... 4 -> 4.1
[INFO] 
[INFO] No dependencies in Dependencies have newer versions.
.
.
.

Une mise à jour en version 4.1 de la librairie commons-collections4 est donc mentionnée pour tous les modules du projet, en indiquant la provenance de la déclaration The following dependencies in Dependency Management. Le fait remarquable est que la déclaration est réalisée dans le projet parent, mais le message est indiqué pour les trois éléments du projet.

Concernant la librairie commons-io, le même type de message est présenté, avec indication de l'emplacement de la définition The following dependencies in Dependencies.

Plugin-icon.png Plugins

Tout comme pour les dépendances, la vérification peut être réalisée sur les plugins à l'aide du goal display-plugin-updates. Les informations fournies sont beaucoup plus complexes car elles sont organisées en fonction d'une compatibilité avec la version de Maven.

#mvn versions:display-plugin-updates
.
.
.
[INFO] ------------------------------------------------------------------------
[INFO] Building Study Versions plugin 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- versions-maven-plugin:2.5:display-plugin-updates (default-cli) @ versions-parent ---
[INFO] artifact org.apache.maven.plugins:maven-clean-plugin: checking for updates from nexusHome
[INFO] artifact org.apache.maven.plugins:maven-compiler-plugin: checking for updates from nexusHome
[INFO] artifact org.apache.maven.plugins:maven-deploy-plugin: checking for updates from nexusHome
[INFO] artifact org.apache.maven.plugins:maven-install-plugin: checking for updates from nexusHome
[INFO] artifact org.apache.maven.plugins:maven-site-plugin: checking for updates from nexusHome
[INFO] artifact org.codehaus.mojo:versions-maven-plugin: checking for updates from nexusHome
[INFO] 
[INFO] All plugins with a version specified are using the latest versions.
[INFO] 
[WARNING] The following plugins do not have their version specified:
[WARNING]   maven-clean-plugin .......................... (from super-pom) 2.2
[WARNING]   maven-deploy-plugin ......................... (from super-pom) 2.4
[WARNING]   maven-install-plugin ........................ (from super-pom) 2.2
[WARNING]   maven-site-plugin .................... (from super-pom) 2.0-beta-4
[INFO] 
[WARNING] Project does not define minimum Maven version, default is: 2.0
[INFO] Plugins require minimum Maven version of: 3.0
[INFO] Note: the super-pom from Maven 3.3.9 defines some of the plugin
[INFO]       versions and may be influencing the plugins required minimum Maven
[INFO]       version.
[INFO] 
[ERROR] Project does not define required minimum version of Maven.
[ERROR] Update the pom.xml to contain maven-enforcer-plugin to
[ERROR] force the maven version which is needed to build this project.
[ERROR] See https://maven.apache.org/enforcer/enforcer-rules/requireMavenVersion.html
[ERROR] Using the minimum version of Maven: 3.0
[INFO] 
[INFO] Require Maven 2.0.2 to use the following plugin updates:
[INFO]   maven-site-plugin ........................................ 2.0-beta-7
[INFO] 
[INFO] Require Maven 2.0.6 to use the following plugin updates:
[INFO]   maven-clean-plugin .............................................. 2.5
[INFO]   maven-deploy-plugin ........................................... 2.8.1
[INFO]   maven-install-plugin .......................................... 2.5.1
[INFO]   maven-site-plugin ............................................. 2.0.1
[INFO] 
[INFO] Require Maven 2.0.9 to use the following plugin updates:
[INFO]   maven-compiler-plugin ........................................... 3.1
[INFO] 
[INFO] Require Maven 2.1.0 to use the following plugin updates:
[INFO]   maven-site-plugin ............................................. 2.1.1
[INFO] 
[INFO] Require Maven 2.2.0 to use the following plugin updates:
[INFO]   maven-site-plugin ............................................... 3.0
[INFO] 
[INFO] Require Maven 2.2.1 to use the following plugin updates:
[INFO]   maven-clean-plugin ............................................ 2.6.1
[INFO]   maven-compiler-plugin ........................................... 3.3
[INFO]   maven-deploy-plugin ........................................... 2.8.2
[INFO]   maven-install-plugin .......................................... 2.5.2
[INFO]   maven-site-plugin ............................................... 3.4
[INFO]   org.codehaus.mojo:versions-maven-plugin ......................... 2.2
[INFO] 
[INFO] Require Maven 3.0 to use the following plugin updates:
[INFO]   maven-clean-plugin ............................................ 3.0.0
[INFO]   maven-compiler-plugin ......................................... 3.7.0
[INFO]   maven-site-plugin ............................................... 3.7
[INFO]   org.codehaus.mojo:versions-maven-plugin ......................... 2.5
[INFO] 
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Versions child 1 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- versions-maven-plugin:2.5:display-plugin-updates (default-cli) @ versions-child-1 ---
[INFO] artifact org.apache.maven.plugins:maven-jar-plugin: checking for updates from nexusHome
[INFO] artifact org.apache.maven.plugins:maven-resources-plugin: checking for updates from nexusHome
[INFO] artifact org.apache.maven.plugins:maven-surefire-plugin: checking for updates from nexusHome
[INFO] 
[INFO] All plugins with a version specified are using the latest versions.
[INFO] 
[WARNING] The following plugins do not have their version specified:
[WARNING]   maven-clean-plugin .......................... (from super-pom) 2.2
[WARNING]   maven-deploy-plugin ......................... (from super-pom) 2.4
[WARNING]   maven-install-plugin ........................ (from super-pom) 2.2
[WARNING]   maven-jar-plugin ............................ (from super-pom) 2.1
[WARNING]   maven-resources-plugin ...................... (from super-pom) 2.2
[WARNING]   maven-site-plugin .................... (from super-pom) 2.0-beta-4
[WARNING]   maven-surefire-plugin ..................... (from super-pom) 2.4.2
[INFO] 
[WARNING] Project does not define minimum Maven version, default is: 2.0
[INFO] Plugins require minimum Maven version of: 3.0
[INFO] Note: the super-pom from Maven 3.3.9 defines some of the plugin
[INFO]       versions and may be influencing the plugins required minimum Maven
[INFO]       version.
[INFO] 
[ERROR] Project does not define required minimum version of Maven.
[ERROR] Update the pom.xml to contain maven-enforcer-plugin to
[ERROR] force the maven version which is needed to build this project.
[ERROR] See https://maven.apache.org/enforcer/enforcer-rules/requireMavenVersion.html
[ERROR] Using the minimum version of Maven: 3.0
[INFO] 
[INFO] Require Maven 2.0.2 to use the following plugin updates:
[INFO]   maven-site-plugin ........................................ 2.0-beta-7
[INFO] 
[INFO] Require Maven 2.0.6 to use the following plugin updates:
[INFO]   maven-clean-plugin .............................................. 2.5
[INFO]   maven-deploy-plugin ........................................... 2.8.1
[INFO]   maven-install-plugin .......................................... 2.5.1
[INFO]   maven-jar-plugin ................................................ 2.4
[INFO]   maven-resources-plugin .......................................... 2.6
[INFO]   maven-site-plugin ............................................. 2.0.1
[INFO]   maven-surefire-plugin ......................................... 2.4.3
[INFO] 
[INFO] Require Maven 2.0.9 to use the following plugin updates:
[INFO]   maven-surefire-plugin .......................................... 2.17
[INFO] 
[INFO] Require Maven 2.1.0 to use the following plugin updates:
[INFO]   maven-site-plugin ............................................. 2.1.1
[INFO] 
[INFO] Require Maven 2.2.0 to use the following plugin updates:
[INFO]   maven-site-plugin ............................................... 3.0
[INFO] 
[INFO] Require Maven 2.2.1 to use the following plugin updates:
[INFO]   maven-clean-plugin ............................................ 2.6.1
[INFO]   maven-deploy-plugin ........................................... 2.8.2
[INFO]   maven-install-plugin .......................................... 2.5.2
[INFO]   maven-jar-plugin ................................................ 2.6
[INFO]   maven-resources-plugin .......................................... 2.7
[INFO]   maven-site-plugin ............................................... 3.4
[INFO]   maven-surefire-plugin .......................................... 2.20
[INFO] 
[INFO] Require Maven 3.0 to use the following plugin updates:
[INFO]   maven-clean-plugin ............................................ 3.0.0
[INFO]   maven-jar-plugin .............................................. 3.0.2
[INFO]   maven-resources-plugin ........................................ 3.0.2
[INFO]   maven-site-plugin ............................................... 3.7
[INFO]   maven-surefire-plugin ........................................ 2.20.1
[INFO] 
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Versions child 2 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- versions-maven-plugin:2.5:display-plugin-updates (default-cli) @ versions-child-2 ---
[INFO] 
[INFO] All plugins with a version specified are using the latest versions.
[INFO] 
[WARNING] The following plugins do not have their version specified:
[WARNING]   maven-clean-plugin .......................... (from super-pom) 2.2
[WARNING]   maven-deploy-plugin ......................... (from super-pom) 2.4
[WARNING]   maven-install-plugin ........................ (from super-pom) 2.2
[WARNING]   maven-jar-plugin ............................ (from super-pom) 2.1
[WARNING]   maven-resources-plugin ...................... (from super-pom) 2.2
[WARNING]   maven-site-plugin .................... (from super-pom) 2.0-beta-4
[WARNING]   maven-surefire-plugin ..................... (from super-pom) 2.4.2
[INFO] 
[WARNING] Project does not define minimum Maven version, default is: 2.0
[INFO] Plugins require minimum Maven version of: 3.0
[INFO] Note: the super-pom from Maven 3.3.9 defines some of the plugin
[INFO]       versions and may be influencing the plugins required minimum Maven
[INFO]       version.
[INFO] 
[ERROR] Project does not define required minimum version of Maven.
[ERROR] Update the pom.xml to contain maven-enforcer-plugin to
[ERROR] force the maven version which is needed to build this project.
[ERROR] See https://maven.apache.org/enforcer/enforcer-rules/requireMavenVersion.html
[ERROR] Using the minimum version of Maven: 3.0
[INFO] 
[INFO] Require Maven 2.0.2 to use the following plugin updates:
[INFO]   maven-site-plugin ........................................ 2.0-beta-7
[INFO] 
[INFO] Require Maven 2.0.6 to use the following plugin updates:
[INFO]   maven-clean-plugin .............................................. 2.5
[INFO]   maven-deploy-plugin ........................................... 2.8.1
[INFO]   maven-install-plugin .......................................... 2.5.1
[INFO]   maven-jar-plugin ................................................ 2.4
[INFO]   maven-resources-plugin .......................................... 2.6
[INFO]   maven-site-plugin ............................................. 2.0.1
[INFO]   maven-surefire-plugin ......................................... 2.4.3
[INFO] 
[INFO] Require Maven 2.0.9 to use the following plugin updates:
[INFO]   maven-surefire-plugin .......................................... 2.17
[INFO] 
[INFO] Require Maven 2.1.0 to use the following plugin updates:
[INFO]   maven-site-plugin ............................................. 2.1.1
[INFO] 
[INFO] Require Maven 2.2.0 to use the following plugin updates:
[INFO]   maven-site-plugin ............................................... 3.0
[INFO] 
[INFO] Require Maven 2.2.1 to use the following plugin updates:
[INFO]   maven-clean-plugin ............................................ 2.6.1
[INFO]   maven-deploy-plugin ........................................... 2.8.2
[INFO]   maven-install-plugin .......................................... 2.5.2
[INFO]   maven-jar-plugin ................................................ 2.6
[INFO]   maven-resources-plugin .......................................... 2.7
[INFO]   maven-site-plugin ............................................... 3.4
[INFO]   maven-surefire-plugin .......................................... 2.20
[INFO] 
[INFO] Require Maven 3.0 to use the following plugin updates:
[INFO]   maven-clean-plugin ............................................ 3.0.0
[INFO]   maven-jar-plugin .............................................. 3.0.2
[INFO]   maven-resources-plugin ........................................ 3.0.2
[INFO]   maven-site-plugin ............................................... 3.7
[INFO]   maven-surefire-plugin ........................................ 2.20.1
.
.
.


Viewer icon.png Voir aussi

Documentation officielle: http://www.mojohaus.org/versions-maven-plugin/

http://www.mojohaus.org/versions-maven-plugin/usage.html