Я могу установить артефакт install:install-file
, но как я могу загрузить артефакт?
Например:
mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST
Я могу установить артефакт install:install-file
, но как я могу загрузить артефакт?
Например:
mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST
Ответы:
Вы можете использовать плагин зависимостей maven, который имеет хорошую dependency:get
цель с версии 2.1. Не нужно пом, все происходит в командной строке.
Чтобы убедиться, что 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
файла:
<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
).
:jar:sources
к артефакту , см. stackoverflow.com/a/31109185/537554
mvn dependency:get -Dartifact=group-id:artefact-id:version
В последней версии (2.8) подключаемого модуля Maven Dependency загрузка артефакта из центрального репозитория 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
(Спасибо Паскалю Тивенту за то, что он предоставил свой замечательный ответ, во-первых. Я добавляю другой ответ, потому что он не помещается в комментарии и будет слишком обширным для редактирования.)
jar:sources
значит / делает? почему нужно указывать "баночка"? и означает ли "источники", что он загрузит дополнительные зависимости, необходимые для артефакта?
sources
файлов , 2. файл JAR, содержащий только исходные файлы Java, 3. файл JAR, содержащий только javadoc
документы API. См. Также: Обработчики артефактов по умолчанию Maven .
[:classifier]
, если у меня есть zip-файл, созданный плагином сборкой, который я хочу скачать.
Вот что сработало для меня, чтобы загрузить последнюю версию артефакта под названием "component.jar" с Maven 3.1.1 в конце (другие предложения этого не сделали, в основном из-за изменений в версии maven, я считаю)
Это фактически загружает файл и копирует его в локальный рабочий каталог
Из Баш:
mvn dependency:get \
-DrepoUrl=http://.../ \
-Dartifact=com.foo.something:component:LATEST:jar \
-Dtransitive=false \
-Ddest=component.jar \
-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 источников артефактов, мы можем использовать:
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 не могут быть загружены транзитивно, что имеет смысл, но в идеале я считаю, что он также может уважать эту опцию, downloadSources
как это делает плагин maven eclipse.
Можно использовать зависимость: копия ( http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html ), которая берет список артефактов, определенных в разделе конфигурации плагина, и копирует их в указанное место. переименование их или удаление версии, если это необходимо. Эта цель может разрешить артефакты из удаленных хранилищ, если они не существуют ни в локальном хранилище, ни в реакторе.
Не все свойства плагина могут быть использованы в maven CLI. Можно указать свойства, для которых определено свойство «User Property:». В приведенном ниже примере я загружаю junit в свою временную папку и удаляю версию из файла 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 как groupId: artifactId: версия [: пакет [: классификатор]]
(Спасибо Паскалю Тивенту за предоставление его https://stackoverflow.com/a/18632876/2509415 в первую очередь. Я добавляю другой ответ)
один лайнер для загрузки последнего артефакта 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"
Использование из официальной документации:
https://maven.apache.org/plugins/maven-dependency-plugin/usage.html#dependency:get
Для моего случая, смотрите ответ ниже:
mvn dependency:get -Dartifact=$2:$3:$4:$5 -DremoteRepositories=$1 -Dtransitive=false
mvn dependency:copy -Dartifact=$2:$3:$4:$5 -DremoteRepositories=$1 -Dtransitive=false -DoutputDirectory=$6
#mvn dependency:get -Dartifact=com.huya.mtp:hynswup:1.0.88-SNAPSHOT:jar -DremoteRepositories=http://nexus.google.com:8081/repository/maven-snapshots/ -Dtransitive=false
#mvn dependency:copy -Dartifact=com.huya.mtp:hynswup:1.0.88-SNAPSHOT:jar -DremoteRepositories=http://nexus.google.com:8081/repository/maven-snapshots/ -Dtransitive=false -DoutputDirectory=.
Используйте команду "mvn dependency: get" для загрузки определенного артефакта и используйте команду "mvn dependency: copy", чтобы скопировать загруженный артефакт в dest dir "-DoutputDirectory"
Вот пример получения ASM-7 с использованием Maven 3.6:
mvn dependency:get -DremoteRepositories=maven.apache.org -Dartifact=org.ow2.asm:7.0:sources:jar
Или вы можете скачать банку отсюда: https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm, а затем
mvn install:install-file -DgroupId=org.ow2.asm -DartifactId=asm -Dversion=7.0 -Dclassifier=sources -Dpackaging=jar -Dfile=/path/to/asm-7.0.jar
Команда:
mvn install:install-file
Обычно устанавливает артефакт в ваш локальный репозиторий, поэтому вам не нужно его загружать. Однако, если вы хотите поделиться своим артефактом с другими, вам нужно будет развернуть артефакт в центральном хранилище, см. Плагин развертывания для более подробной информации.
Кроме того, добавление зависимости к вашему POM автоматически извлечет любые сторонние артефакты, которые вам понадобятся при создании проекта. Т.е. это загрузит артефакт из центрального хранилища.