从命令行获取 pom.xml 属性

2022-09-01 21:45:46

我目前正在为我们的Gitlab CI编写一个脚本,该脚本会自动将文件上传到网络中的NFSShare文件夹。由于我想组织构建,并且我们使用的是maven,我认为我可以“轻松”从pom.xml中获取项目名称。

有没有办法通过命令行工具或其他方式从pom.xml中获取可用的属性?我能想到的唯一另一种方法是“用手来获取价值”——在我看来,这不是一个非常干净的解决方案。

我已经找到了属性插件,但它似乎只通过实际的.properties文件添加新属性...

任何帮助将不胜感激!


答案 1

我知道这个问题很老,但我花了一些时间寻找这个。

要过滤输出,您可以使用标志“-q -DforceStdout”,其中“-q”阻止输出,“-DforceStdout”强制输出插件的结果。例如:

BUILD_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)
echo $BUILD_VERSION

将导致从POM打印项目的版本。

我遇到的第二个重要问题是访问“属性”,这在Nick Holt评论中有所解释。要访问属性,您只需直接访问它们

<project ...>
    <version>123</version>
    (...)
    <properties>
        (...)
        <docker.registry>docker.registry.com</docker.registry>
        (...)
    </properties>
    (...)
</project>

mvn help:evaluate -Dexpression=project.properties.docker.registry -q -DforceStdout

还行

mvn help:evaluate -Dexpression=docker.registry -q -DforceStdout

答案 2

如果您知道所需属性的名称,则可以使用以下公式获取值:

mvn help:evaluate -Dexpression=[property-name] | findstr /R ^^[^^\[INFO\]]

例如:

mvn help:evaluate -Dexpression=basedir | findstr /R ^^[^^\[INFO\]]

将输出:

C:\Users\nick\Local\Projects\example

这显然假设您在Windows盒子上的建筑物删除了Maven在运行时所做的所有其他日志记录。你可以在 Unix 上使用 一个 做类似的事情,但我把它留给你。findstrgrep