gud*_*ier 13 command-line maven
我想从命令行中检索groupId,artifactId和 Maven项目的版本.
本主题中提出的解决方案" 如何将Maven项目版本添加到bash命令行 "是使用以下插件:
mvn org.apache.maven.plugins:maven-help-plugin:2.2:evaluate -Dexpression=project.artifactId
它的工作原理很好,但我想不出如何设置,在同一时间内,project.groupId, project.artifactId & project.version到-Dexpression说法.
我会避免每次使用不同的-Dexpression参数启动3次Maven命令...
THKS
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+:)'`
Run Code Online (Sandbox Code Playgroud)
小智 14
这是另一种不需要创建Maven插件的方法,尽管Olivier已经证明它很容易制作.
mvn -q -Dexec.executable = echo -Dexec.args ='$ {project.groupId} $ {project.artifactId} $ {project.version}' - non-recursive exec:exec 2>/dev/null
请注意,这是针对Linux环境量身定制的.在Windows上,您可以创建一个打印输入或其他内容的批处理文件.
这种方法的一个缺点是你可能必须添加| grep -v "something"到上面命令的最后(在2>/dev/null)之后过滤掉maven打印到stdout的一些文本.在我的情况下,我只有一行文字来过滤,只会出现在我的公司.
信用到期:我从其他StackOverflow线程调整了此信息.
Man*_*ath 10
这是可用的最干净的解决方案:
mvn org.apache.maven.plugins:maven-help-plugin:3.2.0:evaluate \
-Dexpression=project.groupId -q -DforceStdout
mvn org.apache.maven.plugins:maven-help-plugin:3.2.0:evaluate \
-Dexpression=project.artifactId -q -DforceStdout
mvn org.apache.maven.plugins:maven-help-plugin:3.2.0:evaluate \
-Dexpression=project.version -q -DforceStdout
Run Code Online (Sandbox Code Playgroud)
好处:
groupId或version是从 parent 继承的,pom.xml。
xmllint基于 -based 的解决方案会失败!echo或grep)或者,您可以在您的pom.xml,plugins部分下添加此条目:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-help-plugin</artifactId>
<version>3.2.0</version>
</plugin>
Run Code Online (Sandbox Code Playgroud)
然后按如下方式紧凑地运行命令:
mvn help:evaluate -Dexpression=project.groupId -q -DforceStdout
mvn help:evaluate -Dexpression=project.artifactId -q -DforceStdout
mvn help:evaluate -Dexpression=project.version -q -DforceStdout
Run Code Online (Sandbox Code Playgroud)
请注意:
maven-help-plugin版本3.2.0(及更高版本)有forceStdout选项。如果可用,您可以使用来自 artifactory的 mvn-help-plugin3.2.0的可用版本列表中的更新版本替换上述命令。-q抑制详细消息。小智 9
一个更简单的命令,源自 @Patrick's 答案以获得“GAV”格式:
echo '${project.groupId}:${project.artifactId}:${project.version}' | mvn -N -q -DforceStdout help:evaluate
Run Code Online (Sandbox Code Playgroud)
如果要评估外部 *.pom 文件,此命令可能有用:
echo '${project.groupId}:${project.artifactId}:${project.version}' | mvn -N -q -DforceStdout help:evaluate -f <path-to-pom-file>
Run Code Online (Sandbox Code Playgroud)
您可以为 maven-help-plugin 指定多个表达式(因此您只需运行一次),然后通过对您指定的“key”进行 grep'ing 从捕获的输出中提取它们:
output=$(printf \
'LOCAL_REPOSITORY=${settings.localRepository}\n'\
'GROUP_ID=${project.groupId}\n'
'ARTIFACT_ID=${project.artifactId}\n'\
'POM_VERSION=${project.version}\n0\n' \
| mvn help:evaluate --non-recursive )
localRepository=$(echo "$output" | grep '^LOCAL_REPOSITORY' | cut -d = -f 2)
groupId=$(echo "$output" | grep '^GROUP_ID' | cut -d = -f 2)
artifactId=$(echo "$output" | grep '^ARTIFACT_ID' | cut -d = -f 2)
pomVersion=$(echo "$output" | grep '^POM_VERSION' | cut -d = -f 2)
Run Code Online (Sandbox Code Playgroud)
解析 pom.xml 的其他解决方案适用于简单的用例,但是如果您需要访问未在 pom.xml ( settings.localRepository) 中定义或潜在派生值 ( project.version) 中定义的内容,则它们会失效。
In bash, consider the following lines I use to get them.
It uses xmllint and some string manipulation.
GROUP_ID=`echo -e 'setns x=http://maven.apache.org/POM/4.0.0\ncat /x:project/x:groupId/text()' | xmllint --shell pom.xml | grep -v /`
ARTIFACT_ID=`echo -e 'setns x=http://maven.apache.org/POM/4.0.0\ncat /x:project/x:artifactId/text()' | xmllint --shell pom.xml | grep -v /`
VERSION=`echo -e 'setns x=http://maven.apache.org/POM/4.0.0\ncat /x:project/x:version/text()' | xmllint --shell pom.xml | grep -v /`
Run Code Online (Sandbox Code Playgroud)
I hope this helps.
我遇到了 echo 和 InteractiveMode false + 自定义配置文件的问题。事实证明,您可以通过省略第一个${和最后一个${ 来指定表达式中的所有 3 个(或 4 个,如果您需要打包)} ex
mvn -N -q -DforceStdout help:evaluate -Dexpression='project.groupId}:${project.artifactId}:${project.packaging}:${project.version' -f ./xpp3-1.1.3.4.O.pom
Run Code Online (Sandbox Code Playgroud)
或者更优雅地(这将包括打包)使用project.id:
-Dexpression=project.id
Run Code Online (Sandbox Code Playgroud)
这是因为源代码包装了表达式:
handleResponse( "${" + expression + "}", output );
Run Code Online (Sandbox Code Playgroud)
使用InteractiveMode false和带有 -P 的配置文件时出现的错误:
[ERROR] Maven is configured to NOT interact with the user for input. This Mojo requires that 'interactiveMode' in your settings file is flag to 'true'.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17306 次 |
| 最近记录: |