我想从命令行中检索Maven项目的 *groupId、artifactId和版本 *。
本主题“How to get Maven project version to the bash command line“中建议的解决方案是使用以下插件:mvn org.apache.maven.plugins:maven-help-plugin:2.2:evaluate -Dexpression=project.artifactId
它工作得很好,但我不知道如何同时将project.groupId, project.artifactId & project.version
设置为 -Dexpression 参数。
我会避免每次使用不同的 -Dexpression 参数启动3次Maven命令.
谢谢
目前,我通过执行以下操作来检索数据:
local pom_groupid=`mvn org.apache.maven.plugins:maven-help-plugin:2.2:evaluate -Dexpression=project.groupId |grep -Ev '(^\[|Download\w+:)'`
local pom_artifactid=`mvn org.apache.maven.plugins:maven-help-plugin:2.2:evaluate -Dexpression=project.artifactId |grep -Ev '(^\[|Download\w+:)'`
local pom_version=`mvn org.apache.maven.plugins:maven-help-plugin:2.2:evaluate -Dexpression=project.version |grep -Ev '(^\[|Download\w+:)'`
9条答案
按热度按时间bvjveswy1#
我更喜欢避免新的依赖关系,这样我可以很容易地解决问题。使用powershell:
qgzx9mmu2#
xmlstarlet对于XML数据提取很方便,而且比maven快得多。例如:
xhv8bpkk3#
这里有另一种方法,它不需要创建一个Maven插件,尽管Olivier已经证明了创建一个插件是非常容易的。
mvn -q -Dexec.executable=echo -Dexec.args='${project.groupId}${project.artifactId} ${project.version}' --非递归exec:exec 2>/dev/null
请注意,这是针对Linux环境定制的。在windows上,你可能会创建一个批处理文件来打印它的输入或其他东西。
这种方法的一个缺点是,您可能必须将
| grep -v "something"
添加到上述命令的最后(在2>/dev/null
之后),以过滤掉maven打印到标准输出的一些文本。在我的情况下,我只有一行文本要过滤,这只会出现在我的公司。到期的信贷:我从this other StackOverflow thread中改编了这个信息。
k2fxgqgv4#
这是可用的最清洁的解决方案:
优点:
groupId
或version
是从父pom.xml
继承的,也可以正常工作。xmllint
的解决方案失败!echo
或grep
)或者,您可以在
pom.xml
中的plugins
部分下添加此条目:然后运行compute命令如下:
请注意:
maven-help-plugin
版本3.2.0
(及以上)有forceStdout
选项。你可以用artifactory的available versions of mvn-help-plugin列表中的新版本替换上面命令中的3.2.0
,如果可用的话。-q
抑制详细消息。knpiaxh15#
一个更简单的命令,来自@帕特里克的答案,以获得“GAV”格式:
如果要评估外部 *.pom文件,此命令可能有用:
k0pti3hp6#
在bash中,考虑我用来获取它们的以下行。
它使用xmlint和一些字符串操作。
我希望这能帮上忙。
nwo49xxi7#
您可以为maven-help-plugin指定多个表达式(因此您只需运行一次),然后通过grep'ing指定的'key'从捕获的输出中提取它们:
解析pom.xml的其他解决方案适用于简单的用例,但是如果您需要访问pom.xml中未定义的内容(
settings.localRepository
)或潜在的派生值(project.version
),则它们就不起作用了。vof42yt18#
我有一个问题,回声和interactiveMode假+自定义配置文件。原来你可以在表达式中指定所有3(或者如果你需要打包的话指定4个),通过省略第一个**${和最后一个}**ex:
或者用project.id更优雅地**(这将包括打包):
这是因为源代码 Package 了表达式:
来源/ Credits:https://github.com/paul-hammant/maven-plugins/blob/master/maven-help-plugin/src/main/java/org/apache/maven/plugins/help/EvaluateMojo.java
当使用interactiveMode* false和profile与-P时得到的错误:
polkgigr9#
有时候,我们忘记了根据我们的需求定制Maven是多么容易:here is a very simple custom plugin只做一件事,连接groupId,artifactId和version并将其发送给out。
检查它,运行
mvn clean install
(本地)或mvn clean deploy
(存储库),使其在您的环境中可用。然后运行
mvn my.helper.maven.plugin:helper-maven-plugin:me
或mvn helper:me
(在Maven settings.xml中将<pluginGroup>my.helper.maven.plugin</pluginGroup>
添加到<pluginGroups>
之后),以在控制台上显示以下行:my.help.me={project.groupId}:{project.artifactId}:{project.version}
要过滤掉除这一行以外的所有内容,您只需运行以下命令:
或者更简单: