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



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



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


есть идеи?

671   7  

7 ответов:

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

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

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

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

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

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

<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.8)Плагин Зависимости Maven, загрузка артефакта из центрального репозитория 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

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

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

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

от bash:

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

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

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 источников, а не jar артефактов.

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

один лайнер для загрузки последнего артефакта 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"

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

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

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

где артефакт=junit: junit: 4.11-это координаты maven. А вы укажите artifcat как идентификатор_группы:ИД артефакта:версия[:упаковки[:классификатор]]

(спасибо Паскаль Thivent для обеспечения его https://stackoverflow.com/a/18632876/2509415 в первое место. Я добавляю еще один ответ)

команды:

mvn install:install-file 

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

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

Comments

    Ничего не найдено.