我有一个pom文件,其中一些依赖项的版本号依赖于pom文件设置中指定的project version属性。我可以通过命令行覆盖它吗?如果是这样,怎么样?
这是长篇故事:
我们目前正在将我们的项目转移到maven,但我们还没有完成任何方式。有多个模块仍然没有使用maven构建,因此是我们项目中的依赖项(它们通过ant构建到jar中)。发布后,我们希望构建所有这些jar并包含与父项目相同的版本号。对于发布,执行两个步骤(直到我们可以使用maven获取所有内容)
在第二步中,命令行参数用于指定版本:
mvn release:prepare -DreleaseVersion=12.12.4.0 -DdevelopmentVersion=12.12.4.1-SNAPSHOT -Dtag=iv-12.12.4.0
我希望使用指定的版本更新pom文件。但是,运行此命令时,仍在使用pom文件(12.12.4.0-SNAPSHOT)中的版本。这无法“检查快照的依赖项和插件”步骤,我需要解析仍然具有maven版本属性使用的12.12.4.0-SNAPSHOT版本的jar。
这让我想到了如何覆盖它的原始问题,以便版本解析为命令行中指定的版本。 可以让我解决这个问题的其他问题是: 如何在此检查之前允许maven release插件更新pom文件? 如何跳过快照检查(不可取)
我可以在pom文件中创建一个可以覆盖的属性,但是我必须在pom文件中的两个位置维护版本号。
思想?
答案 0 :(得分:44)
将参数直接从命令行放到pom中,例如:
mvn clean install -Dtestng.version=6.3.1
示例:
<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</modelVersion>
<groupId>com.test</groupId>
<artifactId>test</artifactId>
<version>1.0.0</version>
<name>test</name>
<properties>
<testng.version>6.4</testng.version>
</properties>
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>${testng.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
如果你运行它,通常会使用testng版本6.4。但如果你运行它:mvn clean install -Dtestng.version=6.3.1
将使用testng版本6.3.1。