Простий командний рядок для завантаження віддаленого артефакту maven2 до локального сховища?


122

У мене є бібліотека, яку я розповсюджую за допомогою 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?



Відповіді:


168

Оскільки у версії 2.1 плагіна Maven Dependency існує залежність: досягайте мети для цієї мети. Щоб переконатися, що ви використовуєте правильну версію плагіна, вам потрібно буде використовувати "повноцінне ім'я":

mvn org.apache.maven.plugins: maven-залежність-плагін: 2.1: отримати \
    -DrepoUrl = http: //download.java.net/maven/2/ \
    -Dartifact = robo-guice: robo-guice: 0,4-SNAPSHOT

Додатково корисно для показу, як встановити плагін для залежності.
Серхіо Акоста

2
Паскаль, чи можете ви сказати мені, як визначити користувач + пароль для доступу до сховища? Хитрість з користувачем: password @ repourl не працював.
Gábor Lipták

4
мета приємна, але як я можу визначити цільовий каталог, куди я хочу скопіювати файл? (та назва файлу)
domi

9
@domi (запізніла відповідь на потомство): використовуйте "-Ddest = шлях / до / my.jar"; в іншому випадку він просто копіюється у ваш локальний ~ / .m2 / сховище (робить його схожим, що нічого не сталося). Див. Maven.apache.org/plugins/maven-dependency-plugin/… = example => mvn org.apache.maven.plugins: maven-залежність-плагін: 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. Будь ласка, оновіть відповідь, можливо :)
вихідні

46

Дайте їм банальну пам’ять із цими банками, переліченими як залежності та вказівки щодо запуску:

mvn dependency:go-offline

Це витягне залежності до місцевого репо.

Більш прямим рішенням є залежність: get , але це багато аргументів, щоб набрати:

mvn dependency:get -DrepoUrl=something -Dartifact=group:artifact:version

Хороша ідея, хоча командний рядок, який вони могли скопіювати, вставити було б простіше
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
мета копіювання не копіює перехідні депи.
Ренато
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.