Помните, что плагин хочет «repoUrl», несмотря на документацию «repositoryUrl». Это может свести тебя с ума, как и меня!
zakmck
в документах ( maven.apache.org/plugins/maven-dependency-plugin/get-mojo.html ) показаны как xml-параметры (<repositoryUrl> ... </ repositoryUrl>), так и пользовательские свойства командной строки (mvn .. . -DrepoUrl = "..."). Этот конкретный пример устарел, так что не стоит беспокоиться; теперь это теперь равномерно удаленные репозитории (в обоих случаях); но обратите внимание, что параметр "destination" является пользовательским свойством "-Ddest = ..."; Например:> 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 в текущем каталоге)
Чтобы убедиться, что dependency:getцель найдена , вам нужно явно указать maven использовать версию 2.1, т.е. вам нужно использовать полное имя плагина, включая версию:
ОБНОВЛЕНИЕ: В более старых версиях Maven (до 2.1) можно работать в dependency:getобычном режиме (без использования полностью определенного имени и версии), вынуждая вашу копию maven использовать данную версию плагина.
Это можно сделать следующим образом:
1. Добавьте следующую строку в <settings>элемент вашего ~/.m2/settings.xmlфайла:
<usePluginRegistry>true</usePluginRegistry>
2. Добавьте файл ~/.m2/plugin-registry.xmlсо следующим содержимым:
Но, похоже, это больше не работает с Maven 2.1 / 2.2. На самом деле, согласно введению в Реестр плагинов , его функции plugin-registry.xmlбыли переработаны (для переносимости), и реестр плагинов в настоящее время находится в состоянии бездействия в Maven 2 . Так что я думаю, что мы должны использовать длинное имя пока (при использовании плагина без pom, что является идеей dependency:get).
Да, и я только что получил такое же разрешение, используя зависимости: получить цель. Зависимость mvn: get -Dartifact = org.apache.archiva: archiva-webapp: LATEST: war -DrepoUrl = repository.sonatype.org/content/repositories/central Единственное неудобство заключается в том, что я должен предоставить параметр repoUrl. Ваша информация действительно помогает, я использую mvn 2.2.1 (rdebian-1), и я не трогал pluginRegistry. Спасибо.
Xiè Jìléi
2
эта цель "get", кажется, снова "просто работает" (дополнительные настройки / взлом не требуются; плагин 2.5.1, mvn 3.0.4): = пример => 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
майкл
В чем разница между получением и установкой? Разве они оба не принесли в ваш местный репозиторий Maven? --edit: подожди, нет, я понял сейчас; Установка предназначена для копирования ваших локальных отделов в локальный репозиторий m2, а извлечение их с удаленного компьютера.
(Спасибо Паскалю Тивенту за то, что он предоставил свой замечательный ответ, во-первых. Я добавляю другой ответ, потому что он не помещается в комментарии и будет слишком обширным для редактирования.)
Я использовал это для загрузки архетипа Maven. Это прекрасно работает, если вы находитесь за прокси-сервером и работаете с Eclipse, который не может зарегистрироваться, чтобы идентифицировать maven архетипы, даже если вы настроили прокси в настройках xml.
Асевин
mvn org.apache.maven.plugins: плагин maven-dependency-plugin: 2.8: get -Dartifact = org.apache.maven.archetypes: maven-archetype-webapp: 1.0: jar
Acewin
Можете ли вы объяснить, что jar:sourcesзначит / делает? почему нужно указывать "баночка"? и означает ли "источники", что он загрузит дополнительные зависимости, необходимые для артефакта?
red888
«jar» - тип упаковки, «sources» - классификатор. При наличии одной зависимости (например, hibernate-core ) может быть несколько артефактов. Часто имеются: 1. библиотека только для двоичных sourcesфайлов , 2. файл JAR, содержащий только исходные файлы Java, 3. файл JAR, содержащий только javadocдокументы API. См. Также: Обработчики артефактов по умолчанию Maven .
Данило Пьяццалунга
Спасибо за разъяснение того, как правильно использовать [:classifier], если у меня есть zip-файл, созданный плагином сборкой, который я хочу скачать.
jonashackt
43
Вот что сработало для меня, чтобы загрузить последнюю версию артефакта под названием "component.jar" с Maven 3.1.1 в конце (другие предложения этого не сделали, в основном из-за изменений в версии maven, я считаю)
Это фактически загружает файл и копирует его в локальный рабочий каталог
Большое спасибо! Я не нуждалась в событии -DrepoUrl, я полагаю, это подразумевалось от моего помпона в любом случае. Кроме того, я не использовал , -Ddestкак я на самом деле сделал хотение его загрузки в регулярном .m2каталоге.
1
15
destПараметр является устаревшим , и может быть заменен на invokation из copyпосле того, getкак так: mvn dependency:copy -Dartifact=com.foo.something:component:LATEST:jar -DoutputDirectory=.(в данном случае размещения банки в рабочем каталоге).
Джейкоб Райхл
@JacobRaihle Тогда я не могу скачать файл без pom.xml, получаю следующее сообщение об ошибке: Goal requires a project to execute but there is no POM in this directory.
Атлан
2
Полагаю, поддержка @Athlan No-pom может быть более новой. В настоящее время я могу просто бежать mvn dependency:copy(без dependency:getпервого).
Джейкоб Райле
26
Относительно того, как получить двоичный файл артефакта, ответ Паскаля Тивента таков , но чтобы также получить jar источников артефактов, мы можем использовать:
Это работает, потому что artifactпараметр на самом деле состоит из groupId:artifactId:version[:packaging][:classifier]. Просто упаковка и классификатор не являются обязательными.
С jarв упаковке и sourcesв классификаторе , плагин Maven зависимостей понимает , мы просим банку источников, а не артефакт баночки.
К сожалению, на данный момент исходные файлы jar не могут быть загружены транзитивно, что имеет смысл, но в идеале я считаю, что он также может уважать эту опцию, downloadSourcesкак это делает плагин maven eclipse.
Можно использовать зависимость: копия ( http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html ), которая берет список артефактов, определенных в разделе конфигурации плагина, и копирует их в указанное место. переименование их или удаление версии, если это необходимо. Эта цель может разрешить артефакты из удаленных хранилищ, если они не существуют ни в локальном хранилище, ни в реакторе.
Не все свойства плагина могут быть использованы в maven CLI. Можно указать свойства, для которых определено свойство «User Property:». В приведенном ниже примере я загружаю junit в свою временную папку и удаляю версию из файла jar.
Используйте команду "mvn dependency: get" для загрузки определенного артефакта и используйте команду "mvn dependency: copy", чтобы скопировать загруженный артефакт в dest dir "-DoutputDirectory"
Обычно устанавливает артефакт в ваш локальный репозиторий, поэтому вам не нужно его загружать. Однако, если вы хотите поделиться своим артефактом с другими, вам нужно будет развернуть артефакт в центральном хранилище, см. Плагин развертывания для более подробной информации.
Кроме того, добавление зависимости к вашему POM автоматически извлечет любые сторонние артефакты, которые вам понадобятся при создании проекта. Т.е. это загрузит артефакт из центрального хранилища.
Ответы:
Вы можете использовать плагин зависимостей maven, который имеет хорошую
dependency:get
цель с версии 2.1. Не нужно пом, все происходит в командной строке.Чтобы убедиться, что
dependency:get
цель найдена , вам нужно явно указать maven использовать версию 2.1, т.е. вам нужно использовать полное имя плагина, включая версию:ОБНОВЛЕНИЕ: В более старых версиях Maven (до 2.1) можно работать в
dependency:get
обычном режиме (без использования полностью определенного имени и версии), вынуждая вашу копию maven использовать данную версию плагина.Это можно сделать следующим образом:
1. Добавьте следующую строку в
<settings>
элемент вашего~/.m2/settings.xml
файла:2. Добавьте файл
~/.m2/plugin-registry.xml
со следующим содержимым:Но, похоже, это больше не работает с Maven 2.1 / 2.2. На самом деле, согласно введению в Реестр плагинов , его функции
plugin-registry.xml
были переработаны (для переносимости), и реестр плагинов в настоящее время находится в состоянии бездействия в Maven 2 . Так что я думаю, что мы должны использовать длинное имя пока (при использовании плагина без pom, что является идеейdependency:get
).источник
:jar:sources
к артефакту , см. stackoverflow.com/a/31109185/537554mvn dependency:get -Dartifact=group-id:artefact-id:version
В последней версии (2.8) подключаемого модуля Maven Dependency загрузка артефакта из центрального репозитория Maven так же проста, как:
где
groupId:artifactId:version
и т. д. являются координатами MavenПример, протестированный с Maven 2.0.9, Maven 2.2.1 и Maven 3.0.4:
(Спасибо Паскалю Тивенту за то, что он предоставил свой замечательный ответ, во-первых. Я добавляю другой ответ, потому что он не помещается в комментарии и будет слишком обширным для редактирования.)
источник
jar:sources
значит / делает? почему нужно указывать "баночка"? и означает ли "источники", что он загрузит дополнительные зависимости, необходимые для артефакта?sources
файлов , 2. файл JAR, содержащий только исходные файлы Java, 3. файл JAR, содержащий толькоjavadoc
документы API. См. Также: Обработчики артефактов по умолчанию Maven .[:classifier]
, если у меня есть zip-файл, созданный плагином сборкой, который я хочу скачать.Вот что сработало для меня, чтобы загрузить последнюю версию артефакта под названием "component.jar" с Maven 3.1.1 в конце (другие предложения этого не сделали, в основном из-за изменений в версии maven, я считаю)
Это фактически загружает файл и копирует его в локальный рабочий каталог
Из Баш:
источник
-DrepoUrl
, я полагаю, это подразумевалось от моего помпона в любом случае. Кроме того, я не использовал ,-Ddest
как я на самом деле сделал хотение его загрузки в регулярном.m2
каталоге.dest
Параметр является устаревшим , и может быть заменен на invokation изcopy
после того,get
как так:mvn dependency:copy -Dartifact=com.foo.something:component:LATEST:jar -DoutputDirectory=.
(в данном случае размещения банки в рабочем каталоге).Goal requires a project to execute but there is no POM in this directory
.mvn dependency:copy
(безdependency:get
первого).Относительно того, как получить двоичный файл артефакта, ответ Паскаля Тивента таков , но чтобы также получить jar источников артефактов, мы можем использовать:
например
Это работает, потому что
artifact
параметр на самом деле состоит изgroupId:artifactId:version[:packaging][:classifier]
. Просто упаковка и классификатор не являются обязательными.С
jar
в упаковке иsources
в классификаторе , плагин Maven зависимостей понимает , мы просим банку источников, а не артефакт баночки.К сожалению, на данный момент исходные файлы jar не могут быть загружены транзитивно, что имеет смысл, но в идеале я считаю, что он также может уважать эту опцию,
downloadSources
как это делает плагин maven eclipse.источник
Можно использовать зависимость: копия ( http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html ), которая берет список артефактов, определенных в разделе конфигурации плагина, и копирует их в указанное место. переименование их или удаление версии, если это необходимо. Эта цель может разрешить артефакты из удаленных хранилищ, если они не существуют ни в локальном хранилище, ни в реакторе.
Не все свойства плагина могут быть использованы в maven CLI. Можно указать свойства, для которых определено свойство «User Property:». В приведенном ниже примере я загружаю junit в свою временную папку и удаляю версию из файла jar.
где артефакт = junit: junit: 4.11 - координаты maven. И вы указываете artifcat как groupId: artifactId: версия [: пакет [: классификатор]]
(Спасибо Паскалю Тивенту за предоставление его https://stackoverflow.com/a/18632876/2509415 в первую очередь. Я добавляю другой ответ)
источник
один лайнер для загрузки последнего артефакта maven без mvn:
источник
Использование из официальной документации:
Для моего случая, смотрите ответ ниже:
Используйте команду "mvn dependency: get" для загрузки определенного артефакта и используйте команду "mvn dependency: copy", чтобы скопировать загруженный артефакт в dest dir "-DoutputDirectory"
источник
Вот пример получения ASM-7 с использованием Maven 3.6:
Или вы можете скачать банку отсюда: https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm, а затем
источник
Команда:
Обычно устанавливает артефакт в ваш локальный репозиторий, поэтому вам не нужно его загружать. Однако, если вы хотите поделиться своим артефактом с другими, вам нужно будет развернуть артефакт в центральном хранилище, см. Плагин развертывания для более подробной информации.
Кроме того, добавление зависимости к вашему POM автоматически извлечет любые сторонние артефакты, которые вам понадобятся при создании проекта. Т.е. это загрузит артефакт из центрального хранилища.
источник
LATEST
устарела, попробуйте с диапазоном[,)
источник