Comment remplacer la propriété maven en ligne de commande?

88

J'ai le pom simple suivant exécuté par Maven 3.0.4.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>test</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>

</project>

J'essaie de remplacer les paramètres par défaut dans la ligne de commande comme ceci:

mvn -Dproject.build.finalName=build clean package

Mais cela est ignoré, et je comprends test-1.0.jar. J'ai essayé de changer d'autres propriétés, comme outputDirectory, directory, artifactId, mais j'ai également échoué.

Quelle est la bonne façon de faire cela?

glaz666
la source

Réponses:

131

Voir Introduction au POM

finalName est créé comme:

<build>
    <finalName>${project.artifactId}-${project.version}</finalName>
</build>

L'une des solutions consiste à ajouter sa propre propriété:

<properties>
    <finalName>${project.artifactId}-${project.version}</finalName>
</properties>
<build>
    <finalName>${finalName}</finalName>
 </build>

Et maintenant essayez:

mvn -DfinalName=build clean package

Andrzej Jozwik
la source
5
Est-ce la seule façon de faire cela? Que faire si je ne peux pas modifier le fichier POM?
glaz666
1
Je dois remplacer finalNamevia la ligne de commande sans changer le POM. Est-ce faisable?
glaz666
1
Ok, il n'est pas disponible, car vous ne pouvez remplacer que les propriétés définies par l'utilisateur, pas les propriétés Maven car ce sont des propriétés de la classe Model. La solution est décrite dans la réponse.
glaz666
7
Pour remplacer plusieurs paramètres, utilisez plusieurs indicateurs -D. Si quelqu'un se demande.
Matthias
3
De plus, si la propriété que vous essayez de remplacer a des points, vous devrez peut-être la mettre entre guillemets simples comme:mvn '-Dproject.build.finalName=build' clean package
Xantix