【问题标题】:How to override maven property in command line?如何在命令行中覆盖 Maven 属性?
【发布时间】:2012-12-02 07:20:49
【问题描述】:

我有以下由 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>

我正在尝试像这样覆盖命令行中的默认设置:

mvn -Dproject.build.finalName=build clean package

但这被忽略了,我得到了test-1.0.jar。我尝试更改其他属性,例如 outputDirectory、目录、artifactId,但也失败了。

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

【问题讨论】:

    标签: maven command-line maven-3


    【解决方案1】:

    Introduction to the POM

    finalName 创建为:

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

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

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

    现在试试:

    mvn -DfinalName=build clean package

    【讨论】:

    • 这是唯一的方法吗?如果我无法更改 POM 文件怎么办?
    • 我需要通过命令行覆盖finalName而不改变POM。这可行吗?
    • 好吧,它不可用,因为你只能覆盖用户定义的属性,不能覆盖 Maven 属性,因为它们是模型类的属性。答案中描述了解决方案。
    • 要覆盖多个参数,请使用多个 -D 标志。如果有人想知道。
    • 此外,如果您尝试覆盖的属性有句点,您可能需要将其括在单引号中,例如:mvn '-Dproject.build.finalName=build' clean package
    猜你喜欢
    • 1970-01-01
    • 2019-11-27
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    相关资源
    最近更新 更多