22

我有一个 pom 文件,其中一些依赖项的版本号依赖于 pom 文件设置中指定的项目版本属性。我可以通过命令行覆盖它吗?如果是这样,怎么做?

长话短说:

我们目前正在将我们的项目过渡到 maven,但我们还没有完全做到。有多个模块仍未使用 maven 构建,因此是我们项目中的依赖项(它们通过 ant 构建到 jars 中)。发布后,我们希望构建所有这些 jar,并包含与父项目相同的版本号。对于发布,执行两个步骤(直到我们可以使用 maven 获取所有内容)

  1. 这些罐子是用正确的发行版本 (12.12.4.0) 在 ant 中构建的。
  2. 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)。这使“检查快照的依赖项和插件”步骤失败,我需要解析我的 jars,这些 jars 仍然具有 maven 版本属性中使用的 12.12.4.0-SNAPSHOT 版本。

这使我想到了如何覆盖它以使版本解析为命令行上指定的原始问题。可以让我过去的其他问题是:如何允许 maven 发布插件在此检查之前更新 pom 文件?如何跳过快照检查(不可取)

我可以在 pom 文件中创建一个可以覆盖的属性,但是我必须在 pom 文件中的两个位置维护版本号。

想法?

4

2 回答 2

55

从命令行直接将参数放入 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。

请参阅在 Jenkins 中设置 Maven 参数

于 2012-12-04T18:56:57.083 回答
0

这是另一种选择:

<Logger name="com.mypackagename" level="${env:LOG_LEVEL:-error}" additivity="false">
  <AppenderRef ref="Console-Appender"/>
</Logger>

${env:LOG_LEVEL:-error} 表示 env = 环境变量,LOG_LEVEL = env 名称,-error = 默认级别错误。

于 2022-02-08T13:28:09.830 回答