从命令行获取 pom.xml 属性

Posted

技术标签:

【中文标题】从命令行获取 pom.xml 属性【英文标题】:Get pom.xml property from CommandLine 【发布时间】:2014-07-11 06:17:38 【问题描述】:

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

有没有办法通过命令行工具或其他工具从 pom.xml 中获取可用的属性?我能想到的唯一其他方法是“手动正则表达式解析值”——我认为这不是一个非常干净的解决方案。

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

任何帮助将不胜感激!

【问题讨论】:

实际上,您正在寻找一种从脚本中读取 xml 文件的方法 - 类似于 ***.com/q/4680143/289396 好吧,我不想安装另一个程序——而且我已经通过“本机”maven 命令让它工作了——无论如何谢谢! 第二个答案更好。它不是特定于 Windows 的 【参考方案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 机器上构建,findstr 删除了 Maven 在运行时执行的所有其他日志记录。你可以在 Unix 上使用grep 做类似的事情,但我把它留给你。

【讨论】:

是的,非常感谢!因为我在 Linux mvn help:evaluate -Dexpression=project.name | grep "^[^\[]" 是正确的命令;)【参考方案3】:

您可以通过github.com/jkot 尝试以下选项 https://gist.github.com/jkot/8668441#echo-all-available-maven-properties

<!-- pom.xml -->
...
<build>
  <plugins>
    ...
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.7</version>
        <executions>
            <execution>
                <phase>validate</phase>
                <goals>
                    <goal>run</goal>
                </goals>
                <configuration>
                    <tasks>
                        <echoproperties />
                    </tasks>
                </configuration>
            </execution>
        </executions>
    </plugin>
  </plugins>
</build>
...

运行mvn validate,您将获得所有属性

【讨论】:

以上是关于从命令行获取 pom.xml 属性的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Maven 项目版本获​​取到 bash 命令行

如何从 Maven 命令行运行 testng.xml

从命令行运行 maven+eclipse [重复]

Maven 命令行打包 和 pom.xml的常用配置

如何将 Maven 项目版本获​​取到 bash 命令行

SpringBoot项目jar包命令行部署运行时提示“没有主清单属性”问题