Ini beberapa hari pertama saya belajar Maven dan saya masih berjuang dengan dasar-dasarnya. Saya memiliki file .jar eksternal (tidak tersedia di repo publik) yang saya butuhkan untuk referensi dalam proyek saya dan saya mencoba mencari tahu apa pilihan terbaik saya.
Ini adalah proyek skala kecil tanpa repositori pusat untuk perpustakaan, jadi itu harus berupa repositori lokal (entah bagaimana ditambahkan ke kontrol sumber, tidak tahu apakah itu seharusnya bekerja seperti itu?) Atau .jar perlu disimpan di disk di luar repositori formal apa pun.
1) Apa opsi terbaik saya untuk menambahkan file .jar ke referensi proyek saya dengan maven mengingat bahwa saya ingin baik proyek dan perpustakaan berada di kontrol sumber?
2) Saya masih belum bisa melihat Eclipse melihat ketergantungan. Saya secara manual menambahkannya ke bagian pom, dan itu muncul dengan baik di daftar Ketergantungan dalam m2eclipse. kompilasi mvn dan paket mvn keduanya berhasil, tetapi menjalankan program menghasilkan:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
LibraryStuff cannot be resolved to a type
Ini setelah mengedit POM sebagai:
<dependency>
<groupId>stuff</groupId>
<artifactId>library</artifactId>
<version>1.0</version>
<systemPath>${lib.location}/MyLibrary.jar</systemPath>
<scope>system</scope>
</dependency>
Haruskah saya menjalankan mvn install: install-file bahkan berpikir saya sudah memiliki pom.xml diedit seperti di atas?
Terima kasih!
mvn install::install-file
: mkyong.com/maven/…mvn install::install-file
pada repositori lokal Anda akan berarti bahwa siapa pun yang mengkloning kode sumber Anda harus melakukan langkah manual ini juga. Kalau tidak, bangunannya rusakAnda dapat membuat Repositori Dalam Proyek, sehingga Anda tidak harus
run mvn install:install-file
setiap kali mengerjakan komputer baru/groupId/artifactId/version/artifactId-verion.jar
detail baca posting blog ini
https://web.archive.org/web/20121026021311/charlie.cu.cc/2012/06/how-add-external-libraries-maven
sumber
mvn install:install-file
dan kemudian menyalin seluruh struktur direktori dari repositori lokal Anda ke repositori dalam proyek Anda.Ini dapat dengan mudah dicapai dengan menggunakan elemen <scope> bersarang di dalam elemen <dependency>.
Sebagai contoh:
Referensi: http://www.tutorialspoint.com/maven/maven_external_dependencies.htm
sumber
install
tujuan pada proyek depend-ed. Ofc memiliki sistem airgapped dan memiliki semua plugin selain plugin instal, adalah situasi yang cukup langka."The POM for … is missing, no dependency information available” even though it exists in Maven Repository
Manual Maven mengatakan untuk melakukan ini:
sumber
pembaruan Kami baru saja menginstal server Nexus kami sendiri, jauh lebih mudah dan bersih.
Di perusahaan kami, kami memiliki beberapa guci yang kami beberapa guci yang umum tetapi tidak di-host di repositori pakar, kami juga tidak ingin memiliki mereka di penyimpanan lokal. Kami membuat repo mvn (publik) yang sangat sederhana di Github (tetapi Anda dapat menghostingnya di server mana pun atau secara lokal):
perhatikan bahwa ini hanya ideal untuk mengelola beberapa file jar yang jarang disiarkan
Buat repo di GitHub:
https://github.com/<user_name>/mvn-repo/
Tambahkan Repositori di pom.xml
(Catat bahwa file mentah path lengkap akan sedikit berbeda dari nama repo)
Tambahkan dependensi ke host (Github atau server pribadi)
a. Yang perlu Anda ketahui adalah bahwa file disimpan dalam pola yang disebutkan oleh @glitch
/groupId/artifactId/version/artifactId-version.jar
b. Pada host Anda buat folder untuk mencocokkan pola ini.
yaitu jika Anda memiliki file jar bernama
service-sdk-0.0.1.jar
, buat folderservice-sdk/service-sdk/0.0.1/
dan tempatkan file jarservice-sdk-0.0.1.jar
ke dalamnya.c. Uji dengan mencoba mengunduh toples dari browser (dalam kasus kami:
https://github.com/<user_name>/mvn-repo/raw/master/service-sdk/service-sdk/0.0.1/service-sdk-0.0.1.jar
Tambahkan ketergantungan ke file pom.xml Anda:
Nikmati
sumber
Jangan gunakan systemPath. Bertolak belakang dengan apa yang dikatakan orang di sini, Anda dapat memasukkan toples eksternal ke dalam folder di bawah direktori proyek yang sudah Anda periksa dan surga Maven menemukannya seperti dependensi lainnya. Berikut adalah dua langkah penting:
Ini cukup mudah dan Anda dapat menemukan contoh langkah-demi-langkah di sini: http://randomizedsort.blogspot.com/2011/10/configuring-maven-to-use-local-library.html
sumber
Cara Maven untuk menambahkan guci non maven ke proyek maven
Proyek Maven dan guci bukan pakar
Tambahkan plugin instalasi pakar di bagian build Anda
Tambahkan ketergantungan
Referensi Catatan Saya adalah pemilik blog
sumber
Jika Anda mengalami masalah yang sama dan Anda menggunakan spring-boot v1.4 + , Anda dapat melakukannya dengan cara ini.
Ada includeSystemScope yang bisa Anda gunakan untuk menambahkan dependensi cakupan sistem ke toples.
misalnya
Saya menggunakan driver oracle ke proyek saya.
kemudian buat includeSystemScope = true untuk memasukkan jar ke jalur / BOOT-INF / lib / **
dan dikecualikan dari sumber daya untuk menghindari duplikasi termasuk, toples cukup gemuk ~
Semoga berhasil!
sumber
Ubah systemPath Anda .
sumber
Pom.xml akan melihat repositori lokal Anda untuk mencoba dan menemukan ketergantungan yang sesuai dengan artefak Anda. Juga Anda seharusnya tidak benar-benar menggunakan lingkup sistem atau atribut systemPath, ini biasanya disediakan untuk hal-hal yang ada di JDK dan bukan JRE
Lihat pertanyaan ini untuk cara menginstal artefak pakar.
sumber
Perhatikan bahwa semua contoh yang digunakan
membutuhkan luar
melampirkan tag. Tidak jelas dari beberapa contoh.
sumber
Solusi terbaik di sini adalah menginstal repositori: Nexus atau Artifactory. Jika memberi Anda tempat untuk meletakkan hal-hal seperti ini, dan lebih lanjut mempercepat dengan menyimpan barang-barang Anda dari luar.
Jika hal yang Anda hadapi adalah open source, Anda mungkin juga mempertimbangkan untuk menempatkannya di pusat.
Lihat panduannya .
sumber
Dengan Eclipse Oxygen Anda dapat melakukan hal-hal di bawah ini:
Maven akan mengambilnya saat menginstal proyek.
sumber
Jika tabung eksternal dibuat oleh proyek Maven hanya maka Anda dapat menyalin seluruh proyek pada sistem Anda dan menjalankan
dalam direktori proyek. Ini akan menambahkan jar ke direktori .m2 yang merupakan repositori pakar lokal.
Sekarang Anda dapat menambahkan
Ini akan memastikan bahwa Anda
bekerja. Jika Anda menggunakan yang disarankan di sini
Maka Anda harus menambahkan kelas secara individual saat menggunakan mengeksekusi melalui baris perintah.
Anda bisa menambahkan guci eksternal dengan perintah berikut yang dijelaskan di sini
sumber
Cara paling efisien dan terbersih yang saya temukan untuk mengatasi masalah ini adalah dengan menggunakan Paket Github
Buat repositori publik / pribadi kosong sederhana di GitHub sesuai kebutuhan Anda, apakah Anda ingin toples eksternal Anda dihosting secara publik atau tidak.
Jalankan di bawah perintah maven untuk menyebarkan Anda jar eksternal di repositori github dibuat di atas
mvn deploy:deploy-file \ -DgroupId= your-group-id \ -DartifactId= your-artifact-id \ -Dversion= 1.0.0 -Dpackaging= jar -Dfile= path-to-file \ -DrepositoryId= id-to-map-on-server-section-of-settings.xml \ -Durl=https://maven.pkg.github.com/github-username/github-reponame-created-in-above-step
Perintah di atas akan menyebarkan Anda jar eksternal di repositori GitHub yang disebutkan dalam
-Durl=
. Anda dapat merujuk tautan ini pada Cara menggunakan dependensi sebagai Paket GitHub. Tutorial Penerapan Paket GitHubSetelah itu Anda bisa menambahkan ketergantungan menggunakan
groupId
,artifactId
danversion
disebutkan dalam langkah di atas di mavenpom.xml
dan jalankanmvn install
Maven akan mengambil ketergantungan tabung eksternal dari registri Paket GitHub dan menyediakannya di proyek pakar Anda.
Agar ini berfungsi, Anda juga harus mengonfigurasi maven's
settings.xml
untuk diambil dari registri Paket GitHub.sumber