Baris perintah sederhana untuk mengunduh artefak maven2 jarak jauh ke repositori lokal?

122

Saya memiliki pustaka yang saya distribusikan menggunakan maven 2. Pengguna biasa pustaka ini tidak menggunakan maven untuk membangun aplikasi mereka, tetapi kemungkinan besar agak akrab dengan maven dan mungkin sudah menginstalnya.

Saya ingin mendokumentasikan perintah satu baris "sederhana" yang dapat mereka gunakan untuk mengunduh artefak perpustakaan saya ke lokal mereka ~/.m2/repositorytanpa mengharuskan mereka menyiapkan pom.xml untuk melakukannya.

Saya pikir ada cara untuk melakukan ini, tetapi sepertinya saya tidak dapat menemukannya setelah melihat-lihat dokumentasi install:install-fileand dependencyplugin. Saya mencoba hal-hal seperti:

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

tapi saya rasa saya salah paham karena tampaknya plugin instal digunakan untuk menyalin file yang dibuat secara lokal ke dalam repositori lokal, daripada mengunduh artefak jarak jauh ke dalam repositori lokal.

Ini adalah artefak yang ingin saya pasang: http://download.java.net/maven/2/robo-guice/robo-guice/0.4-SNAPSHOT/

Apakah ini mungkin menggunakan maven?

emmby
sumber

Jawaban:

168

Sejak versi 2.1 dari Maven Dependency Plugin , terdapat ketergantungan: dapatkan tujuan untuk tujuan ini. Untuk memastikan Anda menggunakan versi plugin yang benar, Anda harus menggunakan "nama yang sepenuhnya memenuhi syarat":

mvn org.apache.maven.plugins: maven-dependency-plugin: 2.1: dapatkan \
    -DrepoUrl = http: //download.java.net/maven/2/ \
    -Dartifact = robo-guice: robo-guice: 0.4-SNAPSHOT
Pascal Thivent
sumber
Sangat membantu untuk menunjukkan cara menginstal plugin dependensi itu sendiri.
Sergio Acosta
2
Pascal, dapatkah Anda memberi tahu saya cara menentukan pengguna + kata sandi untuk mencapai repositori? Trik dengan user: password @ repourl tidak berhasil.
Gábor Lipták
4
tujuannya bagus, tetapi bagaimana saya dapat menentukan direktori target tempat saya ingin file disalin? (dan nama file)
domi
9
@domi (jawaban terlambat untuk anak cucu): use "-Ddest = path / to / my.jar"; jika tidak, ini hanya akan disalin ke ~ / .m2 / repositori lokal Anda (membuatnya tampak seperti tidak terjadi apa-apa). Lihat maven.apache.org/plugins/maven-dependency-plugin/… = example => 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 (hasil: ant-1.8.1.jar di direktori saat ini)
michael
3
Terima kasih! Sementara, di tautan dokumen yang Anda posting, ada Deprecated. Use remoteRepositoriesuntuk repoUrl. Harap perbarui jawabannya mungkin :)
Akhir pekan
46

Beri mereka pom sepele dengan toples ini terdaftar sebagai dependensi dan instruksi untuk dijalankan:

mvn dependency:go-offline

Ini akan menarik dependensi ke repo lokal.

Solusi yang lebih langsung adalah ketergantungan: get , tetapi banyak argumen untuk diketik:

mvn dependency:get -DrepoUrl=something -Dartifact=group:artifact:version
bmargulies
sumber
Ide bagus, meskipun dengan baris perintah, mereka dapat menyalin-tempel akan lebih mudah
emmby
Jika saya bisa memikirkan satu, saya akan mempostingnya. Saya tidak tahu ada plugin yang melakukan apa yang diminta. Saya tahu cara menulisnya ...
bmargulies
The getmojo sebenarnya mengharapkan -DrepoUrluntuk hadir, tidak -DrepositoryUrl. Mengenai argumen untuk mengetik, tidak ada keajaiban, Anda perlu memberikan informasi ini dengan cara atau yang lain.
Pascal Thivent
Dalam skema pertama saya, pengguna akhir hanya mengetik tiga karakter: mvn. Semua pengetikan lainnya dilakukan oleh op.
bmargulies
22

Mulai versi 2.4 dari Maven Dependency Plugin , Anda juga dapat menentukan tujuan target untuk artefak dengan menggunakan tanda -Ddest. Ini harus menunjuk ke nama file (bukan direktori) untuk artefak tujuan. Lihat halaman parameter untuk parameter tambahan yang dapat digunakan

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
Eric B.
sumber
2
Terima kasih! -Ddest ditandai sebagai usang. Apakah ada solusi baru yang baru?
Dimath
1
Gunakan ketergantungan: salin tujuan sebagai gantinya. maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html
Eric B.
3
tujuan salinan tidak menyalin deps transitif.
Renato