Как загрузить артефакт из командной строки только с Maven? [Дубликат]

нет, вы не можете

#define identifier something

то, что вы определяете, должно быть идентификатором , который не может содержать пробел. Также он не может содержать дефис, начинаться с числа и т. Д., Вы можете определить только идентификатор

то, что вы написали, будет работать

#define replace to replacement here

, но не как вы ожидаете. Эта строка определила replace для замены на to replacement here

hth.

120
задан Xiè Jìléi 13 December 2009 в 04:49
поделиться

6 ответов

Вы можете использовать плагин зависимостей 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

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).

130
ответ дан Pascal Thivent 19 August 2018 в 06:23
поделиться
  • 1
    Да, и я только что получил такое же разрешение, используя зависимость: получить цель. mvn dependency: get -Dartifact = org.apache.archiva: archiva-webapp: ПОСЛЕДНИЕ: war -DrepoUrl = repository.sonatype.org/content/repositories/central Единственное неудобство заключается в том, что я должен предоставить repoUrl. Ваша информация действительно помогает, я использую mvn 2.2.1 (rdebian-1), и я не касался pluginRegistry. Благодарю. – Xiè Jìléi 14 December 2009 в 05:27
  • 2
    этот & quot; get & quot; цель кажется «просто работать». снова (никакой дополнительной конфигурации / взлома не требуется, плагин 2.5.1, mvn 3.0.4): = example = & gt; mvn org.apache.maven.plugins: maven-dependency-plugin: 2.5.1: get -DremoteRepositories = repo.maven.apache.org -Dartifact = org.apache.ant: ant: 1.8. 1 -Ddest = ant-1.8.1.jar – michael 10 September 2012 в 13:25
  • 3
    В чем разница между get и install? Разве они не приходят к вашему местному репозитурию maven? -edit: Подожди, нет, я понял это сейчас; install для ваших локальных отпечатков, которые будут скопированы в локальный репозиторий m2, выберет их из удаленного. – Chris2048 3 January 2014 в 19:56
  • 4
    как также получить источник jar для конкретного артефакта без pom? – ryenus 29 June 2015 в 03:04
  • 5
    нашел его, просто добавьте :jar:sources к артефакту , см. stackoverflow.com/a/31109185/537554 – ryenus 29 June 2015 в 06:42

Команда:

mvn install:install-file 

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

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

-1
ответ дан Clinton 19 August 2018 в 06:23
поделиться

Можно использовать зависимость: 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 за предоставление его https://stackoverflow.com/a/18632876/2509415 . Я добавляю еще один ответ)

67
ответ дан Community 19 August 2018 в 06:23
поделиться
  • 1
    Я использовал это для загрузки архетипа maven. Это отлично работает, если вы находитесь за прокси-сервером и работаете с eclipse, который не может зарегистрироваться для определения типов maven, даже если вы настроили прокси-сервер в настройках xml. – Acewin 27 September 2016 в 18:07
  • 2
    mvn org.apache.maven.plugins: maven-dependency-plugin: 2.8: get -Dartifact = org.apache.maven.archetypes: maven-archetype-webapp: 1.0: jar – Acewin 27 September 2016 в 18:07

один лайнер для загрузки последнего артефакта 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"
8
ответ дан mrduguo 19 August 2018 в 06:23
поделиться
  • 1
    Downvoted. Это решение, похоже, работает только с конкретным продуктом репозитория. – Martín Straus 12 January 2016 в 18:38
  • 2
    Отлично работает с Nexus 2.x, не работает с 3.x (пока) – HDave 16 January 2017 в 21:23
  • 3
    curl: опция -J неизвестна – xuehui 14 December 2017 в 10:09

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

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

From bash:

mvn dependency:get \
    -DrepoUrl=http://.../ \
        -Dartifact=com.foo.something:component:LATEST:jar \
        -Dtransitive=false \
        -Ddest=component.jar \
25
ответ дан verveguy 19 August 2018 в 06:23
поделиться
  • 1
    Большое спасибо! Мне не нужно было -DrepoUrl, я думаю, это подразумевалось от моего пом. Также я не использовал -Ddest, поскольку на самом деле сделал , чтобы загрузить его в обычный каталог .m2. – yair 8 August 2015 в 22:58
  • 2
    Параметр dest устарел и может быть заменен на invokation copy после get следующим образом: mvn dependency:copy -Dartifact=com.foo.something:component:LATEST:jar -DoutputDirectory=. (в этом случае размещение фляги в рабочем каталоге). – Jacob Raihle 8 August 2016 в 15:26
69
ответ дан Community 30 October 2018 в 18:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: