Как получить 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.
Я бы не стал запускать 3 раза команду Maven с другим аргументом -Dexpression каждый раз...
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+:)''
Ответы
Ответ 1
Здесь другой подход, который не требует создания плагина Maven, хотя Оливье показал, что его довольно легко сделать.
mvn -q -Dexec.executable = echo -Dexec.args = '$ {project.groupId} $ {project.artifactId} $ {project.version}' --non-recursive exec: exec 2>/dev/ноль
Обратите внимание, что это с учетом среды Linux. В Windows вы, вероятно, могли бы создать командный файл, который печатает его ввод или что-то.
Недостатком этого подхода является то, что вам, возможно, придется добавить | grep -v "something"
| grep -v "something"
до самого конца приведенной выше команды (после 2>/dev/null
) отфильтровать некоторый текст, который печатает maven на стандартный вывод. В моем случае у меня была только одна строка текста для фильтрации, которая будет отображаться только в моей компании.
Кредит, где это обусловлено: я адаптировал эту информацию из fooobar.com/questions/53969/....
Ответ 2
Иногда мы забываем, как легко приспособить Maven к нашей потребности: вот очень простой пользовательский плагин, который делает одну вещь, объединяется groupId, artifactId и версию и отправить его на выход.
Проверьте это, запустите mvn clean install
(локальный) или mvn clean deploy
(репозиторий), чтобы сделать его доступным в вашей среде.
Затем запустите mvn my.helper.maven.plugin:helper-maven-plugin:me
или mvn helper:me
(после добавления <pluginGroup>my.helper.maven.plugin</pluginGroup>
в ваш <pluginGroups>
в вашем файле Maven settings.xml), чтобы на консоли отображалась следующая строка:
my.help.me={project.groupId}:{project.artifactId}:{project.version}
Чтобы отфильтровать все, кроме этой строки, все, что вам нужно сделать, это запустить:
mvn helper:me| grep ^my.help.me=
или даже проще:
mvn -q helper.me
Ответ 3
Вы можете указать несколько выражений для maven-help-plugin (так что вам нужно будет запустить его только один раз), а затем извлечь их из захваченного вывода, выполнив 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)
Другие решения, которые анализируют pom.xml, работают для простых случаев использования, однако они не работают, если вам нужно получить доступ к тому, что либо не определено в pom.xml(settings.localRepository
), либо к потенциально полученному значению (project.version
).
Ответ 4
В bash рассмотрим следующие строки, которые я использую для их получения.
Он использует xmllint и некоторые строковые манипуляции.
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 /`
Надеюсь, это поможет.
Ответ 5
Я предпочитаю избегать новых зависимостей, где я могу легко решить решение. Использование powershell:
[xml]$pomXml = Get-Content .\pom.xml
# version
Write-Host $pomXml.project.version
# groupId
Write-Host $pomXml.project.groupId
# artifactId
Write-Host $pomXml.project.artifactId