Bekerja dengan baik tetapi tidak perlu menempatkan tag build di dalam tag profil.
Julien BRENELIERE
2
Catatan: <excludeScope>test</excludeScope>masuk ke dalam configurationsimpul.
Jesse Chisholm
84
Pendekatan terbaik tergantung pada apa yang ingin Anda lakukan:
Jika Anda ingin menggabungkan dependensi Anda menjadi file WAR atau EAR, maka cukup atur jenis kemasan proyek Anda ke EAR atau WAR. Maven akan membundel dependensi ke lokasi yang tepat.
Jika Anda ingin membuat file JAR yang menyertakan kode Anda beserta semua dependensi Anda, gunakan plugin assembly dengan deskriptor jar-dengan-dependensi . Maven akan menghasilkan file JAR lengkap dengan semua kelas Anda ditambah kelas dari dependensi apa pun.
Jika Anda ingin menarik dependensi Anda ke direktori target secara interaktif, gunakan plugin dependensi untuk menyalin file Anda.
Jika Anda ingin menarik dependensi untuk beberapa jenis pemrosesan lain, maka Anda mungkin perlu membuat plugin sendiri. Ada API untuk mendapatkan daftar dependensi, dan lokasinya pada disk. Anda harus mengambilnya dari sana ...
Atau, Anda dapat menggunakan $ {project.build.directory} / lib daripada $ {basedir} / target / lib
Cuga
31
Solusi sederhana dan elegan untuk kasus di mana seseorang perlu menyalin dependensi ke direktori target tanpa menggunakan fase pakar lain (saya menemukan ini sangat berguna ketika bekerja dengan Vaadin).
Terima kasih! ini adalah cara termudah untuk hanya menyalin lib yang diperlukan oleh suatu proyek ke dalam folder di suatu tempat sehingga Anda dapat menyalinnya di tempat lain jika perlu, misalnya proyek yang bukan berbasis pakar. Perhatikan bahwa tentu saja Anda bisa memasukkan dalam folder hardcode untuk digunakan jika Anda suka, misalnyamvn dependency:copy-dependencies -DoutputDirectory=./lib
Jika Anda ingin mengirimkan satu bundel toples aplikasi Anda, bersama dengan semua dependensinya dan beberapa skrip untuk menjalankan MainClass, lihat appassembler-maven-plugin .
Konfigurasi berikut akan menghasilkan skrip untuk Window dan Linux untuk meluncurkan aplikasi (dengan jalur yang dihasilkan merujuk semua guci ketergantungan, unduh semua dependensi (ke folder lib di bawah target / appassembler). Plugin perakitan kemudian dapat digunakan untuk mengemas keseluruhan direktori appassembler ke zip yang diinstal / ditempatkan bersama dengan jar ke repositori.
<plugin><groupId>org.codehaus.mojo</groupId><artifactId>appassembler-maven-plugin</artifactId><version>1.0</version><executions><execution><id>generate-jsw-scripts</id><phase>package</phase><goals><goal>generate-daemons</goal></goals><configuration><!--declare the JSW config --><daemons><daemon><id>myApp</id><mainClass>name.seller.rich.MyMainClass</mainClass><commandLineArguments><commandLineArgument>start</commandLineArgument></commandLineArguments><platforms><platform>jsw</platform></platforms></daemon></daemons><target>${project.build.directory}/appassembler</target></configuration></execution><execution><id>assemble-standalone</id><phase>integration-test</phase><goals><goal>assemble</goal></goals><configuration><programs><program><mainClass>name.seller.rich.MyMainClass</mainClass><!-- the name of the bat/sh files to be generated --><name>mymain</name></program></programs><platforms><platform>windows</platform><platform>unix</platform></platforms><repositoryLayout>flat</repositoryLayout><repositoryName>lib</repositoryName></configuration></execution></executions></plugin><plugin><artifactId>maven-assembly-plugin</artifactId><version>2.2-beta-4</version><executions><execution><phase>integration-test</phase><goals><goal>single</goal></goals><configuration><descriptors><descriptor>src/main/assembly/archive.xml</descriptor></descriptors></configuration></execution></executions></plugin>
Descriptor assembly (dalam src / main / assembly) untuk mengemas direcotry sebagai zip adalah:
Hanya untuk menguraikan apa yang sudah dikatakan secara singkat. Saya ingin membuat file JAR yang dapat dieksekusi yang menyertakan dependensi saya bersama dengan kode saya. Ini bekerja untuk saya:
(1) Dalam pom, di bawah <build> <plugins>, saya memasukkan:
Contoh kode Anda tidak menyelesaikan masalah, itu hanya bundel semuanya menjadi satu JAR. Ya, plugin perakitan dapat digunakan untuk mencapai tujuan ini, tetapi tidak seperti ini.
Duncan Jones
Meskipun, pada bacaan lebih lanjut, mungkin Anda merespons komentar ini .
Duncan Jones
sudah begitu lama sehingga saya tidak begitu ingat ... ditambah lagi saya sudah agak berkarat sejak berfokus pada administrasi Linux di perusahaan terakhir saya - tetapi terima kasih atas umpan baliknya!
RubyTuesdayDONO
0
Jika Anda mengalami masalah yang terkait dengan dependensi yang tidak muncul dalam file WEB-INF / lib saat berjalan di server Tomcat di Eclipse, lihat ini:
Jawaban:
Ini bekerja untuk saya:
sumber
excludeScope
opsi ( maven.apache.org/plugins/maven-dependency-plugin/… ).<excludeScope>test</excludeScope>
masuk ke dalamconfiguration
simpul.Pendekatan terbaik tergantung pada apa yang ingin Anda lakukan:
sumber
Bekerja untuk saya dengan direktori dependensi yang dibuat di folder target. Suka itu!
sumber
Lihatlah plugin dependensi Maven , khususnya, dependensi: tujuan copy-dependensi . Lihatlah contoh di bawah judul Ketergantungan: copy-dependensi mojo . Setel properti konfigurasi outputDirectory ke $ {basedir} / target / lib (saya yakin, Anda harus menguji).
Semoga ini membantu.
sumber
Solusi sederhana dan elegan untuk kasus di mana seseorang perlu menyalin dependensi ke direktori target tanpa menggunakan fase pakar lain (saya menemukan ini sangat berguna ketika bekerja dengan Vaadin).
Contoh lengkap pom:
Lalu lari
mvn process-sources
Ketergantungan file jar dapat ditemukan di
/target/dependency
sumber
Jika Anda ingin melakukan ini secara berkala (dan karena itu tidak ingin mengubah POM Anda), coba baris perintah ini:
Jika Anda menghilangkan argumen terakhir , dependensi ditempatkan
target/dependencies
.sumber
mvn dependency:copy-dependencies -DoutputDirectory=./lib
Coba sesuatu seperti ini:
sumber
maven clean install
, maka Anda akan menemukannyalib
ditarget
install
fase denganprocess-resources
sehingga dependensi disalin sebelumbuild
tujuan berjalanYang Anda butuhkan adalah cuplikan berikut di dalam pom.xml's
build/plugins
:Di atas akan berjalan pada
package
fase ketika Anda menjalankanDan dependensi akan disalin ke direktori output yang ditentukan dalam snippet, yaitu
lib
dalam hal ini.Jika Anda hanya ingin melakukannya sesekali, maka tidak ada perubahan ke pom.xml diperlukan. Cukup jalankan yang berikut ini:
Untuk mengganti lokasi default, yaitu
${project.build.directory}/dependencies
, tambahkan properti Sistem bernamaoutputDirectory
, yaitusumber
seandainya
inilah yang bekerja untuk saya:
sumber
Jika Anda ingin mengirimkan satu bundel toples aplikasi Anda, bersama dengan semua dependensinya dan beberapa skrip untuk menjalankan MainClass, lihat appassembler-maven-plugin .
Konfigurasi berikut akan menghasilkan skrip untuk Window dan Linux untuk meluncurkan aplikasi (dengan jalur yang dihasilkan merujuk semua guci ketergantungan, unduh semua dependensi (ke folder lib di bawah target / appassembler). Plugin perakitan kemudian dapat digunakan untuk mengemas keseluruhan direktori appassembler ke zip yang diinstal / ditempatkan bersama dengan jar ke repositori.
Descriptor assembly (dalam src / main / assembly) untuk mengemas direcotry sebagai zip adalah:
sumber
Jika Anda membuat proyek Anda seorang pakar perang atau jenis telinga akan menyalin dependensinya.
sumber
Anda dapat menggunakan Plugin Shade untuk membuat tabung uber di mana Anda dapat menggabungkan semua dependensi pihak ke-3 Anda.
sumber
Hanya untuk menguraikan apa yang sudah dikatakan secara singkat. Saya ingin membuat file JAR yang dapat dieksekusi yang menyertakan dependensi saya bersama dengan kode saya. Ini bekerja untuk saya:
(1) Dalam pom, di bawah <build> <plugins>, saya memasukkan:
(2) Menjalankan rakitan kompilasi mvn: rakitan menghasilkan my-project-0.1-SNAPSHOT-jar-with-dependencies.jar yang ada di direktori target proyek.
(3) Saya menjalankan JAR dengan java -jar my-project-0.1-SNAPSHOT-jar-with-dependencies.jar
sumber
Ini solusi berat untuk menanamkan dependensi berat, tetapi Maven's Assembly Plugin melakukan trik untuk saya.
@ Jawaban Penjual Kaya harus berfungsi, meskipun untuk kasus yang lebih sederhana, Anda hanya perlu kutipan ini dari panduan penggunaan :
sumber
Jika Anda mengalami masalah yang terkait dengan dependensi yang tidak muncul dalam file WEB-INF / lib saat berjalan di server Tomcat di Eclipse, lihat ini:
ClassNotFoundException DispatcherServlet ketika meluncurkan Tomcat (dependensi Maven tidak disalin ke wtpwebapps)
Anda cukup menambahkan Maven Dependencies di Project Properties> Deployment Assembly.
sumber