【问题标题】:Overriding Maven Properties on command line (Maven 2.2.1)在命令行上覆盖 Maven 属性 (Maven 2.2.1)
【发布时间】:2012-08-31 09:21:30
【问题描述】:

我发现,在同一命令行调用上运行 mvn install 并覆盖 POM 中定义的属性时,不会更新安装到本地存储库的 POM 中定义的属性的值,这会导致打包的工件与 POM 文件不同步。例如,考虑两个具有以下 POM 的模块,模块一和模块二

模块一 POM

<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0.0</modelVersion>
<groupId>org.myorg.test</groupId>
<artifactId>module-one</artifactId>
<version>1.0</version>

和模块二 POM

<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0.0</modelVersion>
<groupId>org.myorg.test</groupId>
<artifactId>module-two</artifactId>
<version>1.0</version>
<properties>
    <module.one.version>1.0</module.one.version>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
              <archive>
                <manifest>
                  <addClasspath>true</addClasspath>
                </manifest>
              </archive>
            </configuration>
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>org.myorg.test</groupId>
        <artifactId>module-one</artifactId>
        <version>${module.one.version}</version>
    </dependency>
</dependencies>

在模块一 POM 上运行 mvn install 会将模块一:1.0 安装到您的本地存储库。现在,如果您编辑 module-one POM 并将版本设置为 2.0 并运行 mvn install 将安装 module-one:2.0 到您的本地存储库。

现在在模块二 pom 上运行 mvn install -Dmodule.one.version=2.0 将导致将模块二:1.0 安装到本地存储库。但是,检查构建的 JAR 并打开清单文件将显示以下内容

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Build-Jdk: 1.6.0_26
Class-Path: module-one-2.0.jar

但是在本地存储库中与此构建的 jar 一起使用的 POM 仍将引用对 module-one:1.0 的依赖项,因为该属性将保持最初定义的状态

<properties>
<module.one.version>1.0</module.one.version>
</properties>
...
<dependencies>
<dependency>
        <groupId>org.myorg.test</groupId>
    <artifactId>module-one</artifactId>
    <version>${module.one.version}</version>
</dependency>
 </dependencies>

这是正确的行为吗?还是应该以不同的方式解析属性 module.one.version?

谢谢

【问题讨论】:

    标签: maven maven-2


    【解决方案1】:

    是的,这就是 maven 的工作方式。因此,我总是在 pom 中定义属性的默认值,并在 settings.xml 或命令行或配置文件中覆盖它们。由于存储库中的 pom 有更大的机会为团队中的其他开发人员顺利工作。

    【讨论】:

      猜你喜欢
      • 2012-12-02
      • 2019-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-09
      • 2017-07-27
      • 1970-01-01
      • 2019-01-07
      相关资源
      最近更新 更多