如何在命令行中覆盖maven属性?

gla*_*666 77 command-line maven-3 maven

我有以下由Maven 3.0.4运行的普通pom.

<?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>
Run Code Online (Sandbox Code Playgroud)

我试图在命令行中覆盖默认设置,如下所示:

mvn -Dproject.build.finalName=build clean package
Run Code Online (Sandbox Code Playgroud)

但是这被忽略了,我明白了test-1.0.jar.我试图更改另一个属性,如outputDirectory,directory,artifactId,但也失败了.

做这件事的正确方法是什么?

And*_*wik 115

请参阅POM简介

finalName创建为:

<build>
    <finalName>${project.artifactId}-${project.version}</finalName>
</build>
Run Code Online (Sandbox Code Playgroud)

其中一个解决方案是添加自己的属性:

<properties>
    <finalName>${project.artifactId}-${project.version}</finalName>
</properties>
<build>
    <finalName>${finalName}</finalName>
 </build>
Run Code Online (Sandbox Code Playgroud)

现在尝试:

mvn -DfinalName=build clean package

  • 要覆盖多个参数,请使用多个-D标志.如果有人想知道. (7认同)
  • 这是唯一的方法吗?如果我无法更改POM文件怎么办? (5认同)
  • 好吧,它不可用,因为您只能覆盖用户定义的属性,而不是Maven Properties,因为它们是Model类的属性。答案中描述了解决方案。 (3认同)
  • 我需要在不更改 POM 的情况下通过命令行覆盖 `finalName`。那可行吗? (2认同)
  • 另外,如果您要覆盖的属性具有句点,则可能需要将其括在单引号中,例如:`mvn'-Dproject.build.finalName = build'clean package` (2认同)