Как получить 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