Я можу встановити артефакт 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 . Тому я думаю, що ми повинні використовувати довге ім'я зараз (коли використовуємо плагін без пом, що ідея 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 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
, файл JAR, що містить лише джерела Java, 3. javadoc
, файл JAR лише з документами API. Дивіться також: Maven Завантажувачі артефактів за замовчуванням .
[:classifier]
пояснити, як правильно користуватися, якщо у мене створений zip-файл, створений плагіном assemlby, який я хочу завантажити.
Ось що для мене працювало, щоб завантажити останню версію артефакту під назвою "компонент.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
першого).
Щодо того, як отримати бінарний артефакт, відповідь Паскаля Тівента - це, але щоб також отримати банку з джерелами артефакту, ми можемо використовувати:
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. Можуть бути вказані властивості, у яких визначено властивість "Властивість користувача:". У наведеному нижче прикладі я завантажую 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. І ви вказуєте articat як groupId: artifactId: version [: Packaging [: Classifier]]
(Спасибі Паскалю Тівенту за те, що він надав свій 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 залежність: get" для завантаження конкретного артефакту та використовуйте команду "mvn залежність: 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 автоматично отримає сторонні артефакти, необхідні під час створення проекту. Тобто Це завантажить артефакт із центрального сховища.