Bagaimana cara saya mendapatkan dependensi runtime proyek saya disalin ke target/lib
folder?
Seperti yang sekarang, setelah mvn clean install
satu target
folder hanya jar proyek saya, tapi tidak ada dependensi runtime.
Bagaimana cara saya mendapatkan dependensi runtime proyek saya disalin ke target/lib
folder?
Seperti yang sekarang, setelah mvn clean install
satu target
folder hanya jar proyek saya, tapi tidak ada dependensi runtime.
Jawaban:
Ini bekerja untuk saya:
<project>
...
<profiles>
<profile>
<id>qa</id>
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
excludeScope
opsi ( maven.apache.org/plugins/maven-dependency-plugin/… ).
<excludeScope>test</excludeScope>
masuk ke dalam configuration
simpul.
Pendekatan terbaik tergantung pada apa yang ingin Anda lakukan:
mvn install dependency:copy-dependencies
Bekerja untuk saya dengan direktori dependensi yang dibuat di folder target. Suka itu!
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.
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:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>groupId</groupId>
<artifactId>artifactId</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${targetdirectory}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Lalu lari mvn process-sources
Ketergantungan file jar dapat ditemukan di /target/dependency
Jika Anda ingin melakukan ini secara berkala (dan karena itu tidak ingin mengubah POM Anda), coba baris perintah ini:
mvn dependency: copy-dependencies -DoutputDirectory = $ {project.build.directory} / lib
Jika Anda menghilangkan argumen terakhir , dependensi ditempatkan target/dependencies
.
mvn dependency:copy-dependencies -DoutputDirectory=./lib
Coba sesuatu seperti ini:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>copy</id>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
maven clean install
, maka Anda akan menemukannya lib
ditarget
install
fase dengan process-resources
sehingga dependensi disalin sebelum build
tujuan berjalan
Yang Anda butuhkan adalah cuplikan berikut di dalam pom.xml's build/plugins
:
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
Di atas akan berjalan pada package
fase ketika Anda menjalankan
mvn clean package
Dan 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:
mvn clean package dependency:copy-dependencies
Untuk mengganti lokasi default, yaitu ${project.build.directory}/dependencies
, tambahkan properti Sistem bernama outputDirectory
, yaitu
-DoutputDirectory=${project.build.directory}/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:
<assembly>
<id>archive</id>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>${project.build.directory}/appassembler</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
</assembly>
Jika Anda membuat proyek Anda seorang pakar perang atau jenis telinga akan menyalin dependensinya.
Anda dapat menggunakan Plugin Shade untuk membuat tabung uber di mana Anda dapat menggabungkan semua dependensi pihak ke-3 Anda.
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:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
<configuration>
<archive>
<manifest>
<mainClass>dk.certifikat.oces2.some.package.MyMainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
(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
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 :
<project>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.2</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
</project>
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:
Anda cukup menambahkan Maven Dependencies di Project Properties> Deployment Assembly.