Instruksi untuk menginstal pada build saya memiliki segalanya kecuali bagian generatePom. Itu tampaknya sangat penting.
Jason D
4
<path-to-file> apa artinya? Seperti C: / Pengguna /XXX/WorkspaceDocx/maven/src/main/resources/myJar.jar ...... atau dapatkah kita melakukan $ {project.basedir} /src/main/resources/myJar.jar
Igor Beaufils
17
Jawabannya tidak menyebutkan README atau bahwa toples dibawa. Namun, jika proyek membawa guci maka Anda mungkin juga meletakkan repo di proyek seperti yang disebutkan di sini stackoverflow.com/a/36602256/1000011 maka Anda tidak perlu untuk README karena proyek hanya akan berfungsi seolah-olah guci berada di tengah pakar tanpa langkah manual.
opticyclic
8
@opticyclic komentar Anda perlu lebih banyak upvotes, atau jawaban ini perlu diedit. Ini adalah resep bencana bagi pemula yang tidak menyadari bahwa memasang ke repo Maven lokal tidak akan termasuk untuk semua orang.
Dalam rilis baru fitur ini ditandai sebagai usang tetapi masih berfungsi dan belum dihapus (Anda hanya melihat peringatan di log selama awal maven). Masalah muncul di maven group tentang ini https://issues.apache.org/jira/browse/MNG-6523 (Anda dapat berpartisipasi dan menjelaskan mengapa fitur ini membantu dalam beberapa kasus). Saya harap fitur ini tetap ada!
Jika Anda bertanya kepada saya, selama fitur tersebut tidak dihapus, saya menggunakan ini untuk membuat ketergantungan hanya pada satu file jar nakal di proyek saya yang tidak sesuai dengan repositori. Jika fitur ini dihapus, ya, ada banyak jawaban bagus di sini yang bisa saya pilih nanti!
Ada saat-saat ketika Anda ingin secara khusus menguji stoples tua misalnya, dan saya pikir jawaban ini cocok untuk itu. Itu yang saya butuhkan. Terpilih
John Lockwood
36
Seindah dan semudah kelihatannya, solusi ini memiliki masalah bahwa jar.jar Anda tidak akan dimasukkan dalam file PERANG untuk aplikasi Anda.
Matthias
40
Solusi di atas tidak berfungsi lagi, ia mengembalikan: "'dependencies.dependency.systemPath' untuk xx.jar tidak boleh menunjuk ke file di dalam direktori proyek" Ini sudah ditangani di stackoverflow.com/questions/10935135/…
sarah .ferguson
8
Dalam jawaban ini, bukan artifactIddan groupIddengan cara yang salah di sekitar?
Pertama, saya ingin memberikan penghargaan untuk jawaban ini kepada pengguna Stack Overflow anonim - Saya cukup yakin saya telah melihat jawaban yang sama di sini sebelumnya - tetapi sekarang saya tidak dapat menemukannya.
Pilihan terbaik untuk memiliki file JAR lokal sebagai dependensi adalah membuat repositori Maven lokal. Repositori seperti itu tidak lebih dari struktur direktori yang tepat dengan file pom di dalamnya.
Sebagai contoh saya: Saya memiliki proyek master saya di ${master_project}lokasi dan subproject1 aktif${master_project}/${subproject1} .
Lalu saya membuat repositori Maven di:
${master_project}/local-maven-repo .
Dalam file pom di subproject1 yang terletak di ${master_project}/${subproject1}/pom.xml, repositori perlu ditentukan yang akan mengambil path file sebagai parameter URL:
Ketergantungan dapat ditentukan untuk repositori lainnya. Ini membuat repositori pom Anda independen. Misalnya, setelah JAR yang diinginkan tersedia di pusat Maven, Anda hanya perlu menghapusnya dari repo lokal Anda dan itu akan ditarik dari repo default.
Setelah file JAR diinstal, repo Maven Anda dapat dikomit ke repositori kode, dan seluruh set-up adalah sistem yang independen. ( Contoh kerja di GitHub ).
Saya setuju bahwa memiliki JAR yang berkomitmen untuk repo kode sumber bukan praktik yang baik, tetapi dalam kehidupan nyata, solusi cepat dan kotor terkadang lebih baik daripada repo Nexus penuh untuk menampung satu JAR yang tidak dapat Anda terbitkan.
Ini adalah satu-satunya jawaban yang benar di sini karena itu akan membuat repo Anda dengan benar saat menggunakan deploy.
opticyclic
Apakah pendekatan ini berfungsi jika kode digunakan menggunakan server CI build? Sepertinya build otomatis tidak akan memiliki akses ke dependensi.
Wallace Howery
2
@ user2748659 ya jika di server build CI Anda folder local-maven-repodisertakan (sebagai anak dalam contoh ini) dalam folder sumber Anda
Anthony O.
3
Jawaban inilah yang berhasil bagi saya. Untuk proyek bersama, memiliki repo di direktori proyek dan ditambahkan ke kontrol versi memastikan bahwa siapa pun yang memeriksa proyek tidak akan memiliki dependensi yang hilang. Jika Anda memiliki banyak dependensi, maka repo yang dipakai bersama dan jarak jauh mungkin merupakan solusi yang lebih baik, jika tidak menyimpan repo di direktori proyek tidak menjadi masalah.
Aquarelle
2
Perhatikan bahwa untuk melakukan ini, Anda mungkin perlu menambahkan -Paket = toples. Kalau tidak, Anda mendapatkan "info artefak tidak lengkap atau tidak valid: kemasan tidak ada".
J Woodchuck
43
Saya ingin solusi seperti itu - gunakan maven-install-plugindalam file pom:
Dalam hal ini Anda dapat melakukan mvn initializedan jar akan dipasang di repo pakar lokal. Sekarang toples ini tersedia selama langkah maven di mesin ini (jangan lupa untuk menyertakan dependensi ini seperti ketergantungan maven lainnya dalam pom dengan <dependency></dependency>tag). Dimungkinkan juga untuk mengikat instalasi toples bukan untuk initializemelangkah, tetapi langkah lain yang Anda suka.
Ini berfungsi baik untuk saya, tetapi hanya jika saya menjalankan mvn initializesebelumnya mvn package: Saya tidak bisa mvn initialize packageatau ia mencoba mengunduh JAR dari repo pusat. Kenapa ini? Saya pikir ini akan menjalankan tujuan / fase ini secara berurutan.
DavidS
1
Sebenarnya, mereka harus dijalankan secara berurutan. Lihatlah daftar siklus hidup default: maven.apache.org/guides/introduction/… Anda dapat menggunakan langkah lain untuk mengikat.
sphinks
2
Saya mencoba setiap metode, tetapi pada akhirnya saya harus menggunakan solusi ini. Alasan utamanya adalah, saya ingin dapat membuat paket secara lokal dalam mode offline. Jika saya mendeklarasikannya sebagai ketergantungan dengan repositori yang ditentukan secara lokal, ini selalu dianggap hanya sebagai repo online dan maven build mengeluh karena tidak mendenda artefak. Solusi ini berfungsi dengan baik untuk setiap kasus.
Mauli
2
Saya pikir lebih baik menggunakan fase bersih karena inisialisasi akan dieksekusi setiap kali kita menggunakan paket mvn ketika itu tidak perlu. Akhirnya jika kita hanya perlu menghasilkan jar / perang kita dapat menggunakan langsung paket bersih mvn .
Deoxyseia
" Juga dimungkinkan untuk mengikat toples tidak untuk menginisialisasi langkah, tetapi langkah lain yang Anda suka. " Belum tentu benar. Jika dependensi belum dalam repo dan fase digunakan yang datang setelah fase yang menyelesaikan dependensi (misalnya compile) build akan gagal.
GeroldBroser mengembalikan Monica
29
<dependency><groupId>group id name</groupId><artifactId>artifact name</artifactId><version>version number</version><scope>system</scope><systemPath>jar location</systemPath></dependency>
Namun ini hanya akan hidup pada mesin Anda (jelas), untuk berbagi biasanya masuk akal untuk menggunakan arsip m2 yang tepat (nexus / artifactory) atau jika Anda tidak memiliki ini atau tidak ingin mengaturnya menjadi pakar lokal arsip terstruktur dan konfigurasikan "repositori" di pom Anda: local:
Saya mendapatkan kesalahan Gagal menginstal artefak (akses ditolak). Bagaimana saya bisa memecahkan masalah ini? @Aurasphere
Ramzah Rehman
1
@RamzahRehman mencoba membuka command prompt dengan hak istimewa admi dengan mengklik kanan dan kemudian memilih "Run as administrator"
Aurasphere
9
Salah satu caranya adalah mengunggahnya ke pengelola repositori Maven Anda sendiri (seperti Nexus). Praktek yang baik untuk memiliki manajer repositori sendiri.
Cara bagus lain yang baru-baru ini saya lihat adalah memasukkan Plugin Maven Install ke dalam siklus hidup build Anda: Anda mendeklarasikan dalam POM untuk menginstal file ke repositori lokal. Ini sedikit tetapi overhead kecil dan tidak ada langkah manual yang terlibat.
Berakhir dengan beralih ke gradle. Ini tidak berfungsi. Jika toples lokal didefinisikan sebagai dependensi, maven tidak akan menjalankan plugins sebelum menyelesaikan dependensi, instalasi manual tidak dapat dihindari. menemukan diskusi tentang situasi ini: stackoverflow.com/questions/5951999/...
xinthink
7
Tentu saja Anda dapat menambahkan toples ke folder itu. Tapi mungkin bukan itu yang ingin Anda raih ...
Kasus lain yang menarik adalah ketika Anda ingin memiliki guci pakar pribadi di proyek Anda. Anda mungkin ingin mempertahankan kemampuan Maven untuk menyelesaikan dependensi transitif. Solusinya cukup mudah.
Saya pikir solusi yang lebih baik untuk masalah ini adalah menggunakan maven-install-plugin untuk secara otomatis menginstal file pada waktu instalasi. Ini adalah bagaimana saya mengaturnya untuk proyek saya.
Pertama, tambahkan path (tempat Anda menyimpan .jars lokal) sebagai properti.
Dengan Menyiapkan proyek Anda seperti ini, proyek akan terus membangun bahkan ketika Anda membawanya ke komputer lain (mengingat bahwa ia memiliki semua file jar di jalur yang ditentukan oleh properti local.sdk).
Untuk groupId menggunakan nama yang unik hanya untuk memastikan bahwa tidak ada konflik.
Sekarang ketika Anda mvn installatau mvn testguci lokal akan ditambahkan secara otomatis.
Saya ingin membagikan kode tempat Anda dapat mengunggah folder yang penuh dengan stoples. Ini berguna ketika penyedia tidak memiliki repositori publik dan Anda perlu menambahkan banyak perpustakaan secara manual. Saya telah memutuskan untuk membangun .bat alih-alih memanggil langsung ke pakar karena bisa jadi Kesalahan Memori. Itu disiapkan untuk lingkungan windows tetapi mudah untuk beradaptasi dengan OS linux:
import java.io.File;import java.io.IOException;import java.io.PrintWriter;import java.util.Date;import java.util.jar.Attributes;import java.util.jar.JarFile;import java.util.jar.Manifest;publicclassCreateMavenRepoApp{privatestaticfinalString OCB_PLUGIN_FOLDER ="C://your_folder_with_jars";publicstaticvoid main(String[] args)throwsIOException{File directory =newFile();//get all the files from a directoryPrintWriter writer =newPrintWriter("update_repo_maven.bat","UTF-8");
writer.println("rem "+newDate());File[] fList = directory.listFiles();for(File file : fList){if(file.isFile()){String absolutePath = file.getAbsolutePath();Manifest m =newJarFile(absolutePath).getManifest();Attributes attributes = m.getMainAttributes();String symbolicName = attributes.getValue("Bundle-SymbolicName");if(symbolicName!=null&&symbolicName.contains("com.yourCompany.yourProject")){String[] parts =symbolicName.split("\\.");String artifactId = parts[parts.length-1];String groupId = symbolicName.substring(0,symbolicName.length()-artifactId.length()-1);String version = attributes.getValue("Bundle-Version");String mavenLine="call mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -Dfile="+ absolutePath+" -DgroupId="+ groupId+" -DartifactId="+ artifactId+" -Dversion="+ version+" -Dpackaging=jar ";
writer.println(mavenLine);}}}
writer.close();}}
Setelah menjalankan main ini dari IDE apa pun, jalankan update_repo_maven.bat.
Kode Anda String symbolicName = attributes.getValue("Bundle-SymbolicName"); if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject"))tampaknya menunjukkan bahwa hanya guci khusus yang akan didukung. Bukan itu yang kita butuhkan: melainkan sekelompok guci pihak ketiga. Apakah Anda punya saran cara memasang tabung apa pun dengan cara ini?
javadba
Saya telah memperbaiki kode Anda: saya meletakkan jawaban di bagian bawah.
javadba
3
Ini adalah sintaks pendek untuk versi yang lebih baru:
mvn install:install-file -Dfile=<path-to-file>
Ini berfungsi ketika JAR dibangun oleh Apache Maven - kasus yang paling umum. Maka itu akan berisi pom.xml dalam subfolder dari direktori META-INF, yang akan dibaca secara default.
Ketergantungan Maven . Ini adalah default tetapi saya telah menemukan dalam beberapa kasus secara eksplisit menetapkan lingkup itu juga Maven untuk menemukan perpustakaan lokal di repositori lokal.
Untuk beberapa alasan, dalam aplikasi web saya memberikan perawatan, baik solusi Alireza Fattahi maupun solusi JJ Roman bekerja dengan benar. Dalam kedua kasus, kompilasi berjalan baik (ia melihat toples), tetapi kemasan gagal memasukkan toples ke dalam perang.
Satu-satunya cara saya berhasil membuatnya adalah dengan meletakkan stoples /src/main/webapp/WEB-INF/lib/dan kemudian menggabungkannya dengan solusi Fattahis atau Romawi.
Perhatikan bahwa TIDAK selalu merupakan ide yang baik untuk menggunakan repo lokal. Jika proyek ini dibagikan kepada orang lain maka semua orang akan memiliki masalah dan pertanyaan ketika itu tidak berhasil, dan toples tidak akan tersedia bahkan di sistem kontrol sumber Anda!
Meskipun repo bersama adalah jawaban terbaik, jika Anda tidak dapat melakukan ini karena suatu alasan maka menanamkan toples lebih baik daripada repo lokal. Konten repo khusus lokal dapat menyebabkan banyak masalah, terutama seiring waktu.
jika Anda menambahkan guci di sistem kontrol sumber perpustakaan akan selalu tersedia bersama dengan sumbernya. Tidak ada sumber, tidak ada perpustakaan. Dengan maven, sumbernya mungkin ok tapi repositori tidak tersedia.
sarah.ferguson
@ Terus ... ada ide tentang cara membuat jar yang dapat dieksekusi tanpa menyertakan dependensi eksternal (file perpustakaan)?
Satish Karuturi
Untuk seseorang yang baru menjadi pakar, dan mencari jawaban untuk pertanyaan awal, apa yang dimaksud dengan "menanamkan toples"?
cdock
1
Di repositori lokal Anda, Anda dapat memasang toples Anda dengan mengeluarkan perintah
Anda dapat menulis kode di bawah ini di baris perintah atau jika Anda menggunakan gerhana klik kanan pada proyek -> Run As -> jalankan konfigurasi ... -> di klik kanan panel kiri pada Maven Build -> konfigurasi baru -> tulis kode di Sasaran & di direktori dasar: $ {project_loc: NameOfYourProject} -> Jalankan
Pastikan untuk mengedit filejalur berdasarkan jalur file Anda yang sebenarnya (disarankan untuk menempatkan guci non-pakar eksternal ini di dalam beberapa folder, katakanlah lib, dan tempatkan inilib folder di dalam proyek Anda sehingga dapat menggunakan jalur relatif spesifik proyek dan menghindari penambahan sistem jalur absolut spesifik.
Jika Anda memiliki beberapa guci eksternal, cukup ulangi <execution>untuk guci lainnya dalam yang samamaven-install-plugin .
Langkah 2: Setelah Anda mengkonfigurasi maven-install-pluginseperti yang ditunjukkan di atas dalam pom.xmlfile Anda, Anda harus menggunakan guci ini pom.xmlseperti biasa:
Perhatikan bahwa maven-install-pluginhanya menyalin guci eksternal Anda ke lokal Anda.m2 repositori pakar . Itu dia. Itu tidak secara otomatis memasukkan botol ini sebagai ketergantungan maven ke proyek Anda.
Saya memiliki kesalahan yang sama untuk satu set dependensi di pom.xml saya ternyata versi dependensi tidak ditentukan dalam pom.xml dan disebutkan dalam repositori induk. Untuk beberapa alasan detail versi tidak disinkronkan dengan repo ini. Karenanya saya secara manual memasukkan versi menggunakan tag dan itu bekerja seperti pesona. Sedikit waktu yang diperlukan untuk mencari versi di induk dan tentukan di sini. Tapi ini bisa dilakukan hanya untuk stoples yang menunjukkan kesalahan artifactid dan berfungsi. Semoga ini bisa membantu seseorang.
Jika Anda menggunakan Eclipse, tempatkan toples di lib /, klik kanan pada nama toples dan klik "add to build path". Eclipse akan membuat "pustaka yang direferensikan" dan menempatkan toples untuk Anda
Itu menyelesaikan impor toples segera di program untuk saya
Itu akan menambah entri ke Eclipse .classpath, tetapi maven build Anda mvn packageakan menjadi brokat setelah Anda mulai menggunakan dependensi itu, karena maven tidak memiliki definisi tentang itu, dan itu seharusnya hanya dipom.xml
Paul Verest
ya, Anda benar, paket tidak akan termasuk toples lokal. Tapi saya menjawab pertanyaan, bagaimana cara menambahkannya ke proyek (dengan cara gerhana).
install-file
skrip yang rumit .Jawaban:
Instal JAR ke dalam repositori Maven lokal Anda sebagai berikut:
Dimana masing-masing mengacu pada:
<path-to-file>
: path ke file untuk memuat mis → →c:\kaptcha-2.3.jar
<group-id>
: grup tempat file harus didaftarkan di bawah mis → →com.google.code
<artifact-id>
: nama artefak untuk file misalnya →kaptcha
<version>
: versi file mis. →2.3
<packaging>
: pengemasan file mis. →jar
Referensi
install:install-file
Tujuansumber
Anda dapat menambahkan dependensi lokal secara langsung (seperti yang disebutkan dalam proyek pembangunan pakar dengan pustaka yang disertakan ) seperti ini:
Memperbarui
Dalam rilis baru fitur ini ditandai sebagai usang tetapi masih berfungsi dan belum dihapus (Anda hanya melihat peringatan di log selama awal maven). Masalah muncul di maven group tentang ini https://issues.apache.org/jira/browse/MNG-6523 (Anda dapat berpartisipasi dan menjelaskan mengapa fitur ini membantu dalam beberapa kasus). Saya harap fitur ini tetap ada!
Jika Anda bertanya kepada saya, selama fitur tersebut tidak dihapus, saya menggunakan ini untuk membuat ketergantungan hanya pada satu file jar nakal di proyek saya yang tidak sesuai dengan repositori. Jika fitur ini dihapus, ya, ada banyak jawaban bagus di sini yang bisa saya pilih nanti!
sumber
artifactId
dangroupId
dengan cara yang salah di sekitar?Pertama, saya ingin memberikan penghargaan untuk jawaban ini kepada pengguna Stack Overflow anonim - Saya cukup yakin saya telah melihat jawaban yang sama di sini sebelumnya - tetapi sekarang saya tidak dapat menemukannya.
Pilihan terbaik untuk memiliki file JAR lokal sebagai dependensi adalah membuat repositori Maven lokal. Repositori seperti itu tidak lebih dari struktur direktori yang tepat dengan file pom di dalamnya.
Sebagai contoh saya: Saya memiliki proyek master saya di
${master_project}
lokasi dan subproject1 aktif${master_project}/${subproject1}
.Lalu saya membuat repositori Maven di:
${master_project}/local-maven-repo
.Dalam file pom di subproject1 yang terletak di
${master_project}/${subproject1}/pom.xml
, repositori perlu ditentukan yang akan mengambil path file sebagai parameter URL:Ketergantungan dapat ditentukan untuk repositori lainnya. Ini membuat repositori pom Anda independen. Misalnya, setelah JAR yang diinginkan tersedia di pusat Maven, Anda hanya perlu menghapusnya dari repo lokal Anda dan itu akan ditarik dari repo default.
Hal terakhir yang tidak kalah penting adalah menambahkan file JAR ke repositori lokal menggunakan saklar -DlocalRepositoryPath seperti:
Setelah file JAR diinstal, repo Maven Anda dapat dikomit ke repositori kode, dan seluruh set-up adalah sistem yang independen. ( Contoh kerja di GitHub ).
Saya setuju bahwa memiliki JAR yang berkomitmen untuk repo kode sumber bukan praktik yang baik, tetapi dalam kehidupan nyata, solusi cepat dan kotor terkadang lebih baik daripada repo Nexus penuh untuk menampung satu JAR yang tidak dapat Anda terbitkan.
sumber
${project.parent.basedir}
sepertinya tidak menyelesaikan apa pun saat ini saya menggunakan${project.basedir}/..
dan bekerja dengan sempurna.<mirrorOf>*</mirrorOf>
.Buat folder baru, katakanlah
local-maven-repo
di akar proyek Maven Anda.Cukup tambahkan repo lokal di dalam
<project>
Andapom.xml
:Kemudian untuk setiap tabung eksternal yang ingin Anda instal, buka root proyek Anda dan jalankan:
sumber
local-maven-repo
disertakan (sebagai anak dalam contoh ini) dalam folder sumber AndaSaya ingin solusi seperti itu - gunakan
maven-install-plugin
dalam file pom:Dalam hal ini Anda dapat melakukan
mvn initialize
dan jar akan dipasang di repo pakar lokal. Sekarang toples ini tersedia selama langkah maven di mesin ini (jangan lupa untuk menyertakan dependensi ini seperti ketergantungan maven lainnya dalam pom dengan<dependency></dependency>
tag). Dimungkinkan juga untuk mengikat instalasi toples bukan untukinitialize
melangkah, tetapi langkah lain yang Anda suka.sumber
mvn initialize
sebelumnyamvn package
: Saya tidak bisamvn initialize package
atau ia mencoba mengunduh JAR dari repo pusat. Kenapa ini? Saya pikir ini akan menjalankan tujuan / fase ini secara berurutan.compile
) build akan gagal.sumber
<scope>system
sudah usang sekarang.install:install-file
, artefak untuk repo lokal dan menggunakannya sebagai dependensi "normal" (dengan lingkup defaultcompile
) atau menggunakan solusi repositori dalam proyek .Ya, Anda dapat memiliki tetapi itu bukan ide yang bagus.
Alih-alih instal semua toples ini ke pakar repo
Lihat juga
sumber
Cara yang sangat cepat dan kotor adalah dengan menunjuk ke file lokal:
Namun ini hanya akan hidup pada mesin Anda (jelas), untuk berbagi biasanya masuk akal untuk menggunakan arsip m2 yang tepat (nexus / artifactory) atau jika Anda tidak memiliki ini atau tidak ingin mengaturnya menjadi pakar lokal arsip terstruktur dan konfigurasikan "repositori" di pom Anda: local:
terpencil:
untuk ini jalur relatif juga dimungkinkan menggunakan variabel basedir:
sumber
<url>file:${basedir}</url>
url dasar sebagai gantinya.Tambahkan JAR lokal Anda sendiri di file POM dan gunakan itu di maven build.
Sebagai contoh:
Kemudian tambahkan ke POM seperti ini:
sumber
Salah satu caranya adalah mengunggahnya ke pengelola repositori Maven Anda sendiri (seperti Nexus). Praktek yang baik untuk memiliki manajer repositori sendiri.
Cara bagus lain yang baru-baru ini saya lihat adalah memasukkan Plugin Maven Install ke dalam siklus hidup build Anda: Anda mendeklarasikan dalam POM untuk menginstal file ke repositori lokal. Ini sedikit tetapi overhead kecil dan tidak ada langkah manual yang terlibat.
http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html
sumber
Tentu saja Anda dapat menambahkan toples ke folder itu. Tapi mungkin bukan itu yang ingin Anda raih ...
Jika Anda membutuhkan botol ini untuk kompilasi, periksa pertanyaan terkait ini: Dapatkah saya menambahkan guci ke maven 2 build classpath tanpa menginstalnya?
Juga, sebelum ada yang menyarankan, JANGAN gunakan lingkup sistem.
sumber
Kasus lain yang menarik adalah ketika Anda ingin memiliki guci pakar pribadi di proyek Anda. Anda mungkin ingin mempertahankan kemampuan Maven untuk menyelesaikan dependensi transitif. Solusinya cukup mudah.
Tambahkan baris berikut dalam file pom.xml Anda
Buka folder .m2 / repositori dan salin struktur direktori proyek yang ingin Anda impor ke folder libs .
Misalkan Anda ingin mengimpor ketergantungan
Hanya pergi pada .m2 / repositori dan Anda akan melihat folder berikut
com / mycompany / myproject / 1.2.3
Salin semua yang ada di folder libs Anda (sekali lagi, termasuk folder di bawah .m2 / repositori ) dan Anda selesai.
sumber
garis komando :
sumber
Bagian penting dalam ketergantungan adalah: $ {pom.basedir} (bukan hanya $ {basedir})
sumber
Saya pikir solusi yang lebih baik untuk masalah ini adalah menggunakan maven-install-plugin untuk secara otomatis menginstal file pada waktu instalasi. Ini adalah bagaimana saya mengaturnya untuk proyek saya.
Pertama, tambahkan path (tempat Anda menyimpan .jars lokal) sebagai properti.
Kemudian, di bawah
plugins
tambahkan plugin untuk menginstal stoples saat kompilasi.Akhirnya, dalam dependensi, Anda bisa menambahkan toples
Dengan Menyiapkan proyek Anda seperti ini, proyek akan terus membangun bahkan ketika Anda membawanya ke komputer lain (mengingat bahwa ia memiliki semua file jar di jalur yang ditentukan oleh properti
local.sdk
).Untuk
groupId
menggunakan nama yang unik hanya untuk memastikan bahwa tidak ada konflik.Sekarang ketika Anda
mvn install
ataumvn test
guci lokal akan ditambahkan secara otomatis.sumber
Cara yang disukai adalah membuat repositori jarak jauh Anda sendiri.
Lihat di sini untuk detail tentang cara melakukannya. Lihat bagian ' Mengunggah ke Repositori Jarak Jauh '.
sumber
Saya ingin membagikan kode tempat Anda dapat mengunggah folder yang penuh dengan stoples. Ini berguna ketika penyedia tidak memiliki repositori publik dan Anda perlu menambahkan banyak perpustakaan secara manual. Saya telah memutuskan untuk membangun .bat alih-alih memanggil langsung ke pakar karena bisa jadi Kesalahan Memori. Itu disiapkan untuk lingkungan windows tetapi mudah untuk beradaptasi dengan OS linux:
Setelah menjalankan main ini dari IDE apa pun, jalankan update_repo_maven.bat.
sumber
String symbolicName = attributes.getValue("Bundle-SymbolicName"); if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject"))
tampaknya menunjukkan bahwa hanya guci khusus yang akan didukung. Bukan itu yang kita butuhkan: melainkan sekelompok guci pihak ketiga. Apakah Anda punya saran cara memasang tabung apa pun dengan cara ini?Ini adalah sintaks pendek untuk versi yang lebih baru:
Ini berfungsi ketika JAR dibangun oleh Apache Maven - kasus yang paling umum. Maka itu akan berisi pom.xml dalam subfolder dari direktori META-INF, yang akan dibaca secara default.
Sumber: http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html
sumber
Juga lihat ...
Ketergantungan Maven . Ini adalah default tetapi saya telah menemukan dalam beberapa kasus secara eksplisit menetapkan lingkup itu juga Maven untuk menemukan perpustakaan lokal di repositori lokal.
sumber
Untuk beberapa alasan, dalam aplikasi web saya memberikan perawatan, baik solusi Alireza Fattahi maupun solusi JJ Roman bekerja dengan benar. Dalam kedua kasus, kompilasi berjalan baik (ia melihat toples), tetapi kemasan gagal memasukkan toples ke dalam perang.
Satu-satunya cara saya berhasil membuatnya adalah dengan meletakkan stoples
/src/main/webapp/WEB-INF/lib/
dan kemudian menggabungkannya dengan solusi Fattahis atau Romawi.sumber
Perhatikan bahwa TIDAK selalu merupakan ide yang baik untuk menggunakan repo lokal. Jika proyek ini dibagikan kepada orang lain maka semua orang akan memiliki masalah dan pertanyaan ketika itu tidak berhasil, dan toples tidak akan tersedia bahkan di sistem kontrol sumber Anda!
Meskipun repo bersama adalah jawaban terbaik, jika Anda tidak dapat melakukan ini karena suatu alasan maka menanamkan toples lebih baik daripada repo lokal. Konten repo khusus lokal dapat menyebabkan banyak masalah, terutama seiring waktu.
sumber
Di repositori lokal Anda, Anda dapat memasang toples Anda dengan mengeluarkan perintah
Ikuti tautan bermanfaat ini untuk melakukan hal yang sama dari situs web mkyoung. Anda juga dapat memeriksa panduan pakar untuk hal yang sama
sumber
Untuk menginstal tabung pihak ketiga, Silakan hubungi perintah seperti di bawah ini
sumber
Anda dapat menulis kode di bawah ini di baris perintah atau jika Anda menggunakan gerhana klik kanan pada proyek -> Run As -> jalankan konfigurasi ... -> di klik kanan panel kiri pada Maven Build -> konfigurasi baru -> tulis kode di Sasaran & di direktori dasar: $ {project_loc: NameOfYourProject} -> Jalankan
Dimana masing-masing mengacu pada:
<path-to-file>: path ke file untuk memuat mis - -> c: \ kaptcha-2.3.jar
<group-id>: grup tempat file itu harus didaftarkan, misalnya - - com.google.code
<artifact-id>: nama artefak untuk file mis - -> kaptcha
<version>: versi file mis - -> 2.3
<packaging>: kemasan file mis - -> toples
sumber
Langkah 1: Konfigurasikan
maven-install-plugin
dengan sasaraninstall-file
dipom.xml
Pastikan untuk mengedit
file
jalur berdasarkan jalur file Anda yang sebenarnya (disarankan untuk menempatkan guci non-pakar eksternal ini di dalam beberapa folder, katakanlahlib
, dan tempatkan inilib
folder di dalam proyek Anda sehingga dapat menggunakan jalur relatif spesifik proyek dan menghindari penambahan sistem jalur absolut spesifik.Jika Anda memiliki beberapa guci eksternal, cukup ulangi
<execution>
untuk guci lainnya dalam yang samamaven-install-plugin
.Langkah 2: Setelah Anda mengkonfigurasi
maven-install-plugin
seperti yang ditunjukkan di atas dalampom.xml
file Anda, Anda harus menggunakan guci inipom.xml
seperti biasa:Perhatikan bahwa
maven-install-plugin
hanya menyalin guci eksternal Anda ke lokal Anda.m2
repositori pakar . Itu dia. Itu tidak secara otomatis memasukkan botol ini sebagai ketergantungan maven ke proyek Anda.Ini poin kecil, tapi terkadang mudah dilewatkan.
sumber
Saya memiliki kesalahan yang sama untuk satu set dependensi di pom.xml saya ternyata versi dependensi tidak ditentukan dalam pom.xml dan disebutkan dalam repositori induk. Untuk beberapa alasan detail versi tidak disinkronkan dengan repo ini. Karenanya saya secara manual memasukkan versi menggunakan tag dan itu bekerja seperti pesona. Sedikit waktu yang diperlukan untuk mencari versi di induk dan tentukan di sini. Tapi ini bisa dilakukan hanya untuk stoples yang menunjukkan kesalahan artifactid dan berfungsi. Semoga ini bisa membantu seseorang.
sumber
Di Apache Maven 3.5.4, saya harus menambahkan kutip ganda. Tanpa kutip ganda, itu tidak berhasil untuk saya.
contoh: mvn install: install-file "-Dfile = lokasi ke file jar" "-DgroupId = grup id" "-DartifactId = artifact id" "-Dversion = versi" "-Dpackaging = jenis paket"
sumber
sumber
JAWABAN INI HANYA UNTUK PENGGUNA ECLIPSE:
Jika Anda menggunakan Eclipse, tempatkan toples di lib /, klik kanan pada nama toples dan klik "add to build path". Eclipse akan membuat "pustaka yang direferensikan" dan menempatkan toples untuk Anda
Itu menyelesaikan impor toples segera di program untuk saya
sumber
.classpath
, tetapi maven build Andamvn package
akan menjadi brokat setelah Anda mulai menggunakan dependensi itu, karena maven tidak memiliki definisi tentang itu, dan itu seharusnya hanya dipom.xml