Projemin çalışma zamanı bağımlılıklarını target/lib
klasöre nasıl kopyalayabilirim?
Sonra, şu anda olduğu gibi klasörü yalnızca benim projenin kavanoz, ancak çalışma zamanı bağımlılıkları hiçbirini içermez.mvn clean install
target
Projemin çalışma zamanı bağımlılıklarını target/lib
klasöre nasıl kopyalayabilirim?
Sonra, şu anda olduğu gibi klasörü yalnızca benim projenin kavanoz, ancak çalışma zamanı bağımlılıkları hiçbirini içermez.mvn clean install
target
Yanıtlar:
Bu benim için çalışıyor:
<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
seçeneği ekliyorum ( maven.apache.org/plugins/maven-dependency-plugin/… ).
<excludeScope>test</excludeScope>
içine girer configuration
.
En iyi yaklaşım, ne yapmak istediğinize bağlıdır:
mvn install dependency:copy-dependencies
Hedef klasörde oluşturulan bağımlılıklar dizini ile benim için çalışır. Beğendim!
Maven bağımlılık eklentisine , özellikle bağımlılık: kopya bağımlılıkları hedefine göz atın . Bağımlılık: kopya bağımlılıkları mojo başlığı altındaki örneğe bakın . Set outputDirectory $ {basedir} / hedefe / lib yapılandırma özelliği (İnanıyorum, sen teste gerekir).
Bu yardımcı olur umarım.
Bir başka maven fazı kullanmadan bağımlılıkları bir hedef dizine kopyalamak gerektiğinde basit ve zarif bir çözüm (Vaadin ile çalışırken bunu çok yararlı buldum).
Komple pom örneği:
<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>
O zaman koş mvn process-sources
Jar dosyası bağımlılıkları şurada bulunabilir: /target/dependency
Bunu ara sıra yapmak istiyorsanız (ve böylece POM'nizi değiştirmek istemiyorsanız), şu komut satırını deneyin:
mvn bağımlılığı: copy-bağımlılıkları -DoutputDirectory = $ {project.build.directory} / lib
Son argümanı atlarsanız, bağımlılıklar yerleştirilir target/dependencies
.
mvn dependency:copy-dependencies -DoutputDirectory=./lib
Bunun gibi bir şey deneyin:
<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
, o zaman bulacaksınız lib
içindetarget
install
olan faz process-resources
bağımlılıkları önce kopyalanan böylece build
gol ishal
İhtiyacınız olan tek şey pom.xml'lerin içindeki aşağıdaki snippet'tir 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>
Yukarıda çalıştırdığınızda yukarıdaki package
aşama çalışacaktır
mvn clean package
Ve bağımlılıklar snippet'te belirtilen outputDirectory öğesine, yani lib
bu durumda kopyalanacaktır .
Bunu yalnızca ara sıra yapmak istiyorsanız, pom.xml dosyasında herhangi bir değişiklik yapılması gerekmez. Sadece aşağıdakileri çalıştırın:
mvn clean package dependency:copy-dependencies
Varsayılan konumu geçersiz kılmak için , yani ${project.build.directory}/dependencies
adlı bir System özelliği ekleyin;outputDirectory
-DoutputDirectory=${project.build.directory}/lib
Diyelim
İşte benim için işe yarayan şey:
mvn yükleme bağımlılığı: kopya bağımlılıkları -DincludeScope = runtime -DoutputDirectory = target / lib
MainClass'ı çağırmak için tüm bağımlılıkları ve bazı komut dosyalarıyla birlikte uygulama kavanozunuzun bir paketini sunmak istiyorsanız, appassembler-maven-eklentisine bakın .
Aşağıdaki yapılandırma) hedef / appassembler altında bir lib klasörüne tüm bağımlılıklarını (indirmek, tüm bağımlılık kavanozları başvuran Oluşturulan bir yol ile (uygulamayı başlatmak için Pencere ve Linux için komut dosyaları oluşturur. Montaj eklentisi sonra tüm paketlemek için kullanılabilir appassembler dizini depoya kavanoz ile birlikte kurulan / dağıtılan bir zip.
<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>
Direcotry'i bir zip olarak paketlemek için montaj tanımlayıcısı (src / main / assembly):
<assembly>
<id>archive</id>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>${project.build.directory}/appassembler</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
</assembly>
Projenizi bir savaş ya da kulak tipi yaparsanız bağımlılıklar kopyalar.
Tüm 3. taraf bağımlılıklarınızı bir araya getirebileceğiniz bir uber kavanozu oluşturmak için Shade Eklentisini kullanabilirsiniz.
Sadece kısaca söylenenleri hecelemek için. Kodlarımla birlikte bağımlılıklarımı içeren yürütülebilir bir JAR dosyası oluşturmak istedim. Bu benim için çalıştı:
(1) Pom'da, <build> <plugins> altına dahil ettim:
<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) Çalışan mvn derleme montajı: montaj projenin hedef dizininde istenen my-project-0.1-SNAPSHOT-jar-with-dependsencies.jar üretti.
(3) JAR'ı java -jar my-project-0.1-SNAPSHOT-jar-bağımlılıklarla çalıştırdım.jar
Ağır bağımlılıkları yerleştirmek için ağır bir çözüm, ama Maven'in Meclis Eklentisi benim için hile yapıyor.
@ Rich Seller'in cevabı işe yarayacaktır, ancak daha basit durumlar için sadece kullanım kılavuzundan bu alıntıya ihtiyacınız vardır :
<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>
Eclipse'de bir Tomcat sunucusunda çalışırken WEB-INF / lib dosyasında görünmeyen bağımlılıklarla ilgili sorun yaşıyorsanız, şuna bakın:
Maven Bağımlılıklarını Proje Özellikleri> Dağıtım Montajına eklemeniz gerekiyordu.