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

123

У меня есть библиотека, которую я распространяю с помощью maven 2. Типичный пользователь этой библиотеки не использует maven для создания своих приложений, но, вероятно, немного знаком с maven и, вероятно, установил его.

Я хотел бы задокументировать "простую" однострочную команду, которую они могут использовать для загрузки артефактов моей библиотеки на свой локальный компьютер, ~/.m2/repositoryне требуя, чтобы они создавали для этого pom.xml.

Я думал, что есть способ сделать это, но не нашел его, просмотрев документацию по плагину install:install-fileи dependency. Я пробовал такие вещи, как:

mvn install:install-file -DrepositoryId=java.net -Durl=http://download.java.net/maven/2/ -Dfile=robo-guice-0.4-20091121.174618-1.jar -DpomFile=robo-guice-0.4-20091121.174618-1.pom -DgroupId=robo-guice -DartifactId=robo-guice -Dversion=0.4-SNAPSHOT -Dpackaging=jar

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

Это артефакт, который я хотел бы установить: http://download.java.net/maven/2/robo-guice/robo-guice/0.4-SNAPSHOT/

Возможно ли это с помощью maven?

emmby
источник

Ответы:

168

Начиная с версии 2.1 подключаемого модуля Maven Dependency , для этой цели существует зависимость: получить цель. Чтобы убедиться, что вы используете правильную версию плагина, вам нужно будет использовать «полное имя»:

mvn org.apache.maven.plugins: maven-dependency-plugin: 2.1: получить \
    -DrepoUrl = http: //download.java.net/maven/2/ \
    -Dartifact = робо-Guice: робо-Guice: 0,4-СНАПШОТ
Паскаль Тивент
источник
Очень полезно для демонстрации того, как установить сам плагин зависимостей.
Серхио Акоста
2
Паскаль, не могли бы вы сказать мне, как определить пользователь + пароль для доступа к репозиторию? Уловка с user: password @ repourl не сработала.
Gábor Lipták
4
цель хорошая, но как я могу определить целевой каталог, в который я хочу, чтобы файл был скопирован? (и название файла)
domi
9
@domi (запоздалый ответ для потомков): используйте «-Ddest = path / to / my.jar»; в противном случае он просто копируется в ваш локальный репозиторий ~ / .m2 / (выглядит так, как будто ничего не произошло). См. Maven.apache.org/plugins/maven-dependency-plugin/… = example => 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 (результат: ant-1.8.1.jar в текущем каталоге)
michael
3
Спасибо! Хотя в опубликованной вами ссылке на документ есть Deprecated. Use remoteRepositoriesдля repoUrl. Пожалуйста, обновите ответ, возможно :)
Выходные
47

Дайте им банальный pom с этими jar-файлами, указанными как зависимости и инструкции для запуска:

mvn dependency:go-offline

Это перетащит зависимости в локальное репо.

Более прямое решение - это dependency: get , но нужно ввести много аргументов:

mvn dependency:get -DrepoUrl=something -Dartifact=group:artifact:version
bmargulies
источник
Хорошая идея, хотя командную строку они могли бы скопировать и вставить было бы проще
emmby
Если бы я мог придумать один, я бы опубликовал его. Я не знаю ни одного плагина, который бы делал то, что нужно. Я знаю, как написать ...
bmargulies
getХаризмы на самом деле ожидает , -DrepoUrlчтобы присутствовать, не -DrepositoryUrl. Что касается аргументов типа, здесь нет никакого волшебства, вам нужно предоставить эту информацию тем или иным способом.
Паскаль Тивент,
В моей первой схеме конечный пользователь вводит только три символа: mvn. Все остальные операции по набору текста выполняются оператором.
bmargulies
22

Начиная с версии 2.4 подключаемого модуля Maven Dependency , вы также можете определить целевое назначение для артефакта с помощью флага -Ddest. Он должен указывать на имя файла (а не на каталог) для артефакта назначения. См. Страницу параметров для дополнительных параметров, которые можно использовать

mvn org.apache.maven.plugins:maven-dependency-plugin:2.4:get \
    -DremoteRepositories=http://download.java.net/maven/2 \
    -Dartifact=robo-guice:robo-guice:0.4-SNAPSHOT \
    -Ddest=c:\temp\robo-guice.jar
Эрик Б.
источник
2
Спасибо! -Ddest помечен как устаревший. Есть новое решение?
Димат
1
Используйте зависимость: вместо этого скопируйте цель. maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html
Эрик Б.
3
цель копирования не копирует переходные зависимости.
Ренато