Saya dapat menginstal artefak install:install-file
, tetapi bagaimana cara mengunduh artefak?
Sebagai contoh:
mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST
Saya dapat menginstal artefak install:install-file
, tetapi bagaimana cara mengunduh artefak?
Sebagai contoh:
mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST
Jawaban:
Anda dapat menggunakan plugin ketergantungan maven yang memiliki dependency:get
tujuan yang bagus sejak versi 2.1. Tidak perlu pom, semuanya terjadi di baris perintah.
Untuk memastikan untuk menemukan dependency:get
tujuannya, Anda harus secara eksplisit memberi tahu pakar untuk menggunakan versi 2.1, yaitu Anda harus menggunakan nama plugin yang sepenuhnya memenuhi syarat, termasuk versi:
mvn org.apache.maven.plugins:maven-dependency-plugin:2.1:get \
-DrepoUrl=url \
-Dartifact=groupId:artifactId:version
PEMBARUAN: Dengan versi Maven yang lebih lama (sebelum 2.1), dimungkinkan untuk berjalan secara dependency:get
normal (tanpa menggunakan nama dan versi yang sepenuhnya memenuhi syarat) dengan memaksa salinan pakar untuk menggunakan versi plugin yang diberikan.
Hal ini dapat dilakukan sebagai berikut:
1. Tambahkan baris berikut dalam <settings>
elemen ~/.m2/settings.xml
file Anda :
<usePluginRegistry>true</usePluginRegistry>
2. Tambahkan file ~/.m2/plugin-registry.xml
dengan konten berikut:
<?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>
Tapi ini tampaknya tidak berfungsi lagi dengan pakar 2.1 / 2.2. Sebenarnya, menurut Pengantar Registry Plugin , fitur-fitur plugin-registry.xml
telah dirancang ulang (untuk portabilitas) dan plugin plugin saat ini dalam keadaan semi-aktif dalam Maven 2 . Jadi saya pikir kita harus menggunakan nama panjang untuk saat ini (saat menggunakan plugin tanpa pom, yang merupakan ide di balik dependency:get
).
:jar:sources
ke artefak , lihat stackoverflow.com/a/31109185/537554
mvn dependency:get -Dartifact=group-id:artefact-id:version
Dengan versi terbaru (2.8) dari Plugin Maven Dependency , mengunduh artefak dari Maven Central Repository semudah:
mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -Dartifact=groupId:artifactId:version[:packaging[:classifier]]
di mana groupId:artifactId:version
, dll. adalah koordinat Maven
Contoh, diuji dengan Maven 2.0.9, Maven 2.2.1, dan 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
(Terima kasih kepada Pascal Thivent karena memberikan jawaban yang luar biasa sejak awal. Saya menambahkan jawaban lain, karena itu tidak cocok dengan komentar dan terlalu luas untuk diedit.)
jar:sources
artinya / tidak? mengapa Anda perlu menentukan "toples"? dan apakah "sumber" berarti itu akan mengunduh dependensi tambahan yang diperlukan artefak?
sources
, file JAR yang hanya berisi sumber-sumber Java, 3. javadoc
, file JAR dengan API docs saja. Lihat juga: Penangan Artefak Default Maven .
[:classifier]
benar, jika saya memiliki plugin lengkap yang dibuat file zip yang ingin saya unduh.
Inilah yang berhasil bagi saya untuk mengunduh versi terbaru dari sebuah artefak yang disebut "component.jar" dengan Maven 3.1.1 pada akhirnya (saran lain tidak, sebagian besar karena perubahan versi maven, saya percaya)
Ini sebenarnya mengunduh file dan menyalinnya ke direktori kerja lokal
Dari bash:
mvn dependency:get \
-DrepoUrl=http://.../ \
-Dartifact=com.foo.something:component:LATEST:jar \
-Dtransitive=false \
-Ddest=component.jar \
-DrepoUrl
, saya kira itu tersirat dari pom saya pula. Juga saya tidak menggunakan -Ddest
seperti yang saya benar-benar melakukan keinginan untuk itu download ke biasa .m2
direktori.
dest
parameter sudah ditinggalkan , dan bisa diganti dengan invokation dari copy
setelah get
seperti: mvn dependency:copy -Dartifact=com.foo.something:component:LATEST:jar -DoutputDirectory=.
(dalam hal ini menempatkan tabung di direktori kerja).
Goal requires a project to execute but there is no POM in this directory
.
mvn dependency:copy
(tanpa yang dependency:get
pertama).
Mengenai cara mendapatkan biner artefak, jawaban Pascal Thivent adalah itu, tetapi untuk juga mendapatkan tabung sumber artefak, kita dapat menggunakan:
mvn dependency:get -Dartifact=groupId:artifactId:version:jar:sources
misalnya
mvn dependency:get -Dartifact=junit:junit:4.12:jar:sources
Ini berfungsi karena artifact
parameter sebenarnya terdiri dari groupId:artifactId:version[:packaging][:classifier]
. Hanya pengemasan dan penggolong adalah opsional.
Dengan jar
sebagai pengemasan dan sources
sebagai penggolong , plugin dependensi pakar memahami bahwa kami meminta toples sumber, bukan toples artefak.
Sayangnya untuk saat ini sumber file jar tidak dapat diunduh secara transitif, yang memang masuk akal, tetapi idealnya saya percaya itu juga dapat menghargai opsi downloadSources
seperti halnya plugin gerhana.
Seseorang dapat menggunakan dependensi: salin ( http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html ) yang mengambil daftar artefak yang ditentukan di bagian konfigurasi plugin dan menyalinnya ke lokasi yang ditentukan , mengganti nama mereka atau menghapus versi jika diinginkan. Tujuan ini dapat menyelesaikan artefak dari repositori jarak jauh jika tidak ada di repositori lokal atau reaktor.
Tidak semua properti plugin dapat digunakan di maven CLI. Properti yang memiliki properti "Properti Pengguna:" yang ditentukan dapat ditentukan. Dalam contoh di bawah ini saya mengunduh junit ke folder temp saya dan menghapus vesion dari file jar.
mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:copy -Dartifact=junit:junit:4.11 -DoutputDirectory=/tmp -Dmdep.stripVersion=true
di mana artifact = junit: junit: 4.11 adalah koordinat pakar. Dan Anda menentukan artifcat sebagai groupId: artifactId: version [: packaging [: classifier]]
(Terima kasih kepada Pascal Thivent untuk memberikan https://stackoverflow.com/a/18632876/2509415 di tempat pertama. Saya menambahkan jawaban lain)
satu liner untuk mengunduh artefak maven terbaru tanpa 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"
Penggunaan dari dokumentasi resmi:
https://maven.apache.org/plugins/maven-dependency-plugin/usage.html#dependency:get
Untuk kasus saya, lihat jawabannya di bawah:
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=.
Gunakan perintah "mvn dependency: get" untuk mengunduh aritfact spesifik dan gunakan perintah "mvn dependency: copy" untuk menyalin artefak yang diunduh ke dest dir "-DoutputDirectory"
Berikut ini contoh untuk mendapatkan ASM-7 menggunakan Maven 3.6:
mvn dependency:get -DremoteRepositories=maven.apache.org -Dartifact=org.ow2.asm:7.0:sources:jar
Atau Anda dapat mengunduh toples dari sini: https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm lalu
mvn install:install-file -DgroupId=org.ow2.asm -DartifactId=asm -Dversion=7.0 -Dclassifier=sources -Dpackaging=jar -Dfile=/path/to/asm-7.0.jar
Perintah:
mvn install:install-file
Biasanya menginstal artefak di repositori lokal Anda, jadi Anda tidak perlu mengunduhnya. Namun, jika Anda ingin membagikan artefak Anda dengan orang lain, Anda perlu menyebarkan artefak ke repositori pusat, lihat plugin deploy untuk lebih jelasnya.
Selain itu menambahkan ketergantungan pada POM Anda akan secara otomatis mengambil artefak pihak ketiga yang Anda butuhkan saat membangun proyek Anda. Yaitu Ini akan mengunduh artefak dari repositori pusat.