从命令行获取pom.xml属性

时间:2014-05-22 09:34:01

标签: java maven command-line continuous-integration gitlab-ci

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

有没有办法通过命令行工具或其他东西从pom.xml中获取属性?我唯一能想到的另一种方式是“手工制作正则表达式” - 在我看来,这不是一个非常干净的解决方案。

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

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:9)

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

要过滤输出,您可以使用标记" -q -DforceStdout"在哪里" -q"防止输出和" -DforceStdout"强制输出插件的结果。 E.g:

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

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

我遇到的第二个重要问题是访问"属性"尼克霍尔特评论中解释了这一点。要访问属性,您只需直接访问它们

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

WRONG

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

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

答案 1 :(得分:5)

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

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

例如:

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

将输出:

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

这显然假设您在Windows框中构建findstr,删除Maven运行时所执行的所有其他日志记录。您可以在Unix上使用grep执行类似的操作,但我会将其留给您。