Como substituir a propriedade maven na linha de comando?

88

Eu tenho o seguinte pom simples rodando pelo 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>

Estou tentando substituir as configurações padrão na linha de comando desta forma:

mvn -Dproject.build.finalName=build clean package

Mas isso é ignorado e eu entendo test-1.0.jar. Tentei alterar outras propriedades, como outputDirectory, directory, artifactId, mas também falhou.

Qual é a maneira correta de fazer isso?

glaz666
fonte

Respostas:

131

Veja a introdução ao POM

finalName é criado como:

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

Uma das soluções é adicionar propriedade própria:

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

E agora tente:

mvn -DfinalName=build clean package

Andrzej Jozwik
fonte
5
Essa é a única maneira de fazer isso? E se eu não conseguir fazer alterações no arquivo POM?
glaz666
1
Preciso substituir finalNamepor meio da linha de comando sem alterar o POM. Isso é viável?
glaz666
1
Ok, não está disponível, porque você só pode substituir as propriedades definidas pelo usuário, não as propriedades do Maven, porque são propriedades da classe Model. A solução está descrita na resposta.
glaz666
7
Para substituir vários parâmetros, use vários sinalizadores -D. Se alguém está se perguntando.
Matthias
3
Além disso, se a propriedade que você está tentando substituir tiver pontos, pode ser necessário colocá-la entre aspas simples, como:mvn '-Dproject.build.finalName=build' clean package
Xantix