Как загрузить определенный артефакт Maven в одной командной строке?

Я могу установить артефакт путем install:install-file, но как я могу загрузить артефакт?

Например:

mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST

Ответ 1

Вы можете использовать плагин зависимостей maven, который имеет приятный dependency:get с версии 2.1. Нет необходимости в помпе, все происходит в командной строке.

Чтобы найти цель dependency:get, вам нужно явно указать maven для использования версии 2.1, то есть вам нужно использовать полное имя плагина, включая версию:

mvn org.apache.maven.plugins:maven-dependency-plugin:2.1:get \
    -DrepoUrl=url \
    -Dartifact=groupId:artifactId:version

UPDATE:. В более старых версиях Maven (до версии 2.1) можно нормально запускать dependency:get (без использования полного имени и версии), заставляя вашу копию maven использовать данная версия плагина.

Это можно сделать следующим образом:

1. Добавьте следующую строку в элемент <settings> вашего файла ~/.m2/settings.xml:

<usePluginRegistry>true</usePluginRegistry>

2. Добавьте файл ~/.m2/plugin-registry.xml со следующим содержимым:

<?xml version="1.0" encoding="UTF-8"?>
<pluginRegistry xsi:schemaLocation="http://maven.apache.org/PLUGIN_REGISTRY/1.0.0 http://maven.apache.org/xsd/plugin-registry-1.0.0.xsd"
xmlns="http://maven.apache.org/PLUGIN_REGISTRY/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-dependency-plugin</artifactId>
      <useVersion>2.1</useVersion>
      <rejectedVersions/>
    </plugin>
  </plugins>
</pluginRegistry>

Но это, похоже, больше не работает с maven 2.1/2.2. Фактически, согласно Введение в реестр плагинов, функции plugin-registry.xml были переработаны (для переносимости), а реестр плагинов в настоящее время находится в полубесплатное состояние в Maven 2. Поэтому я думаю, что мы должны использовать длинное имя на данный момент (при использовании плагина без pom, что является идеей dependency:get).

Ответ 2

С последней версией (2.8) Maven Dependency Plugin загрузка артефакта из Центрального репозитория Maven выполняется так же, как:

mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -Dartifact=groupId:artifactId:version[:packaging[:classifier]]

где groupId:artifactId:version и т.д. координаты Maven

Пример, проверенный с помощью Maven 2.0.9, Maven 2.2.1 и Maven 3.0.4:

mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -Dartifact=org.hibernate:hibernate-entitymanager:3.4.0.GA:jar:sources

(Спасибо Pascal Thivent за то, что он предоставил ему замечательный ответ. Я добавляю еще один ответ, потому что он не вписывается в комментарий, и он слишком обширны для редактирования.)

Ответ 3

Вот то, что сработало для меня, чтобы загрузить последнюю версию артефакта под названием "component.jar" с Maven 3.1.1 в конце (другие предложения не были сделаны, в основном из-за изменений версии maven, которые я считаю)

Это фактически загружает файл и копирует его в локальный рабочий каталог

От bash:

mvn dependency:get \
    -DrepoUrl=http://.../ \
        -Dartifact=com.foo.something:component:LATEST:jar \
        -Dtransitive=false \
        -Ddest=component.jar \

Ответ 4

Что касается того, как получить двоичный файл артефакта, Pascal Thivent отвечает, но, чтобы получить артефактные источники, мы можем использовать:

mvn dependency:get -Dartifact=groupId:artifactId:version:jar:sources

например

mvn dependency:get -Dartifact=junit:junit:4.12:jar:sources

Это работает, потому что параметр artifact фактически состоит из groupId:artifactId:version[:packaging][:classifier]. Только упаковка и классификатор являются необязательными.

С jar как упаковкой и sources качестве классификатора, плагин зависимостей maven понимает, что мы запрашиваем банку источников, а не банку артефактов.

К сожалению, на данный момент исходные файлы jar не могут быть загружены транзитивно, что имеет смысл, но в идеале я верю, что он также может уважать вариант downloadSources как это делает плагин maven eclipse.

Ответ 5

один вкладыш для загрузки последнего артефакта maven без mvn:

curl -O -J -L  "https://repository.sonatype.org/service/local/artifact/maven/content?r=central-proxy&g=io.staticcdn.sdk&a=staticcdn-sdk-standalone-optimizer&e=zip&v=LATEST"

Ответ 6

Можно использовать зависимость: copy (http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html), которая принимает список артефактов, определенных в разделе конфигурации плагина, и копирует их в указанное место, переименование или удаление версии, если это необходимо. Эта цель может разрешить артефакты из удаленных репозиториев, если они не существуют ни в местном репозитории, ни в реакторе.

Не все свойства плагина могут использоваться в CLI maven. Можно указать свойства, которые имеют свойство "Свойство пользователя:". В приведенном ниже примере я загружаю junit в свою временную папку и удаляю vesion из файла jar.

mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:copy -Dartifact=junit:junit:4.11 -DoutputDirectory=/tmp -Dmdep.stripVersion=true

где   artifact = junit: junit: 4.11 - координаты maven. И вы указываете artifcat как groupId: artifactId: version [: packaging [: classifier]]

(Спасибо Pascal Thivent за предоставление его fooobar.com/questions/55365/.... Я добавляю еще один ответ)

Ответ 7

Команда:

mvn install:install-file 

Обычно устанавливает артефакт в вашем локальном репозитории, поэтому вам не нужно его загружать. Однако, если вы хотите поделиться своим артефактом с другими, вам нужно будет развернуть артефакт в центральный репозиторий, чтобы узнать больше о развернуть плагин.

Кроме того, добавив dependency к вашему POM, вы автоматически получите любые артефакты сторонних производителей, которые вам нужны при создании вашего проекта. То есть Это загрузит артефакт из центрального репозитория.

Ответ 8

Вот пример получения ASM-7 с использованием Maven 3.6:

mvn dependency:get -DremoteRepositories=maven.apache.org -Dartifact=org.ow2.asm:7.0:sources:jar

Или вы можете скачать банку отсюда: https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm, а затем

mvn install:install-file -DgroupId=org.ow2.asm -DartifactId=asm -Dversion=7.0 -Dclassifier=sources -Dpackaging=jar -Dfile=/path/to/asm-7.0.jar

Ответ 9

LATEST устарел, попробуйте с диапазоном [,)

./mvnw org.apache.maven.plugins:maven-dependency-plugin:3.1.1:get \  
-DremoteRepositories=repoId::default::https://nexus/repository/maven-releases/ \
"-Dartifact=com.acme:foo:[,)"