Saya ingin tabung berada di lib pihak ke-3 dalam kontrol sumber, dan menautkannya dengan jalur relatif dari file pom.xml.
Jika Anda benar-benar ingin ini (mengerti, jika Anda tidak dapat menggunakan repositori perusahaan), maka saran saya akan menggunakan "file repositori" lokal untuk proyek dan untuk tidak menggunakan sebuah system
ketergantungan scoped. The system
scoped harus dihindari, dependensi tersebut tidak bekerja dengan baik di banyak situasi (misalnya dalam perakitan), mereka menyebabkan lebih banyak masalah daripada manfaat.
Jadi, sebagai gantinya, deklarasikan repositori lokal ke proyek:
<repositories>
<repository>
<id>my-local-repo</id>
<url>file://${project.basedir}/my-repo</url>
</repository>
</repositories>
Instal lib pihak ketiga Anda di sana menggunakan install:install-file
dengan localRepositoryPath
parameter:
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<myGroup> \
-DartifactId=<myArtifactId> -Dversion=<myVersion> \
-Dpackaging=<myPackaging> -DlocalRepositoryPath=<path>
Pembaruan: Tampaknya install:install-file
mengabaikan localRepositoryPath
saat menggunakan versi 2.2 dari plugin. Namun, ini berfungsi dengan versi 2.3 dan yang lebih baru dari plugin. Jadi gunakan nama plugin yang memenuhi syarat untuk menentukan versi:
mvn org.apache.maven.plugins:maven-install-plugin:2.3.1:install-file \
-Dfile=<path-to-file> -DgroupId=<myGroup> \
-DartifactId=<myArtifactId> -Dversion=<myVersion> \
-Dpackaging=<myPackaging> -DlocalRepositoryPath=<path>
dokumentasi maven-install-plugin
Akhirnya, nyatakan seperti ketergantungan lainnya (tetapi tanpa system
cakupan):
<dependency>
<groupId>your.group.id</groupId>
<artifactId>3rdparty</artifactId>
<version>X.Y.Z</version>
</dependency>
Ini adalah IMHO solusi yang lebih baik daripada menggunakan system
lingkup karena ketergantungan Anda akan diperlakukan seperti warga negara yang baik (misalnya akan dimasukkan dalam majelis dan sebagainya).
Sekarang, saya harus menyebutkan bahwa "cara yang tepat" untuk menghadapi situasi ini di lingkungan perusahaan (mungkin tidak demikian halnya di sini) adalah menggunakan repositori perusahaan.
localRepositoryPath
...basedir/./my-local-repo
dengan satu.
saja.Menggunakan
system
ruang lingkup.${basedir}
adalah direktori pom Anda.Namun disarankan agar Anda menginstal toples Anda di repositori, dan tidak mengikatnya ke SCM - setelah semua itulah yang coba dihilangkan oleh pakar.
sumber
Ini adalah metode lain selain jawaban saya sebelumnya di Bisakah saya menambahkan toples ke maven 2 membangun classpath tanpa menginstalnya?
Ini akan melewati batas ketika menggunakan multi-modul build terutama jika JAR yang diunduh dirujuk dalam proyek anak di luar induk. Ini juga mengurangi pekerjaan pengaturan dengan membuat file POM dan SHA1 sebagai bagian dari build. Ini juga memungkinkan file untuk berada di mana saja di proyek tanpa memperbaiki nama atau mengikuti struktur penyimpanan pakar.
Ini menggunakan maven-install-plugin. Agar ini berfungsi, Anda perlu mengatur proyek multi-modul dan memiliki proyek baru yang mewakili build untuk menginstal file ke dalam repositori lokal dan memastikan bahwa yang pertama.
Anda proyek multi-modul pom.xml akan terlihat seperti ini:
File repositori / pom.xml kemudian akan berisi definisi untuk memuat JAR yang merupakan bagian dari proyek Anda. Berikut ini adalah beberapa cuplikan dari file pom.xml.
Kemasan pom mencegah hal ini dari melakukan tes atau mengkompilasi atau menghasilkan file jar. Daging pom.xml ada di bagian build tempat maven-install-plugin digunakan.
Untuk menginstal lebih dari satu file, tambahkan saja eksekusi.
sumber
Ini bekerja untuk saya: Katakanlah saya memiliki ketergantungan ini
Kemudian, tambahkan jalur kelas untuk ketergantungan sistem Anda secara manual seperti ini
Konfigurasi penuh:
sumber
Saya sebelumnya telah menulis tentang pola untuk melakukan ini.
Ini sangat mirip dengan solusi yang diusulkan oleh Pascal, meskipun ia memindahkan semua dependensi tersebut ke modul repositori khusus sehingga Anda tidak perlu mengulanginya di mana pun dependensi digunakan jika itu adalah multi-module build.
sumber
Pada dasarnya, tambahkan ini ke pom.xml:
sumber
kami beralih ke gradle dan ini bekerja jauh lebih baik di gradle;). kita cukup tentukan folder yang bisa kita masukkan guci untuk situasi sementara seperti itu. Kami masih memiliki sebagian besar botol kami didefinisikan di bagian manajemen ketergantungan khas (yaitu sama dengan pakar). Ini hanyalah satu lagi ketergantungan yang kami definisikan.
jadi pada dasarnya sekarang kita bisa memasukkan toples yang kita inginkan ke dalam lib dir kita untuk pengujian sementara jika itu bukan repositori maven di suatu tempat.
sumber
Satu tambahan kecil untuk solusi yang diposting oleh Pascal
Ketika saya mengikuti rute ini, saya mendapat kesalahan di maven saat memasang ojdbc jar.
Setelah menambahkan -DpomFile, masalah teratasi.
sumber
Anda dapat menggunakan eclipse untuk menghasilkan Jar yang dapat dijalankan: Ekspor / Jar yang dapat dijalankan
sumber