ฉันจะคัดลอกการอ้างอิงแบบรันไทม์ของโครงการไปยังtarget/lib
โฟลเดอร์ได้อย่างไร
มันเป็นอยู่ในขณะนี้หลังจากโฟลเดอร์มีเพียงขวดโครงการของฉัน แต่ไม่มีการอ้างอิงรันไทม์mvn clean install
target
ฉันจะคัดลอกการอ้างอิงแบบรันไทม์ของโครงการไปยังtarget/lib
โฟลเดอร์ได้อย่างไร
มันเป็นอยู่ในขณะนี้หลังจากโฟลเดอร์มีเพียงขวดโครงการของฉัน แต่ไม่มีการอ้างอิงรันไทม์mvn clean install
target
คำตอบ:
สิ่งนี้ใช้ได้กับฉัน:
<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
เลือกให้กับตัวเอง( maven.apache.org/plugins/maven-dependency-plugin/ … )
<excludeScope>test</excludeScope>
เข้าไปในconfiguration
โหนด
วิธีที่ดีที่สุดขึ้นอยู่กับสิ่งที่คุณต้องการจะทำ:
mvn install dependency:copy-dependencies
ทำงานได้สำหรับฉันด้วยไดเรกทอรีการอ้างอิงที่สร้างขึ้นในโฟลเดอร์เป้าหมาย ชอบมัน!
ลองดูที่เป็นปลั๊กอินพึ่งพา Mavenเฉพาะที่พึ่งพา: เป้าหมายของการคัดลอกอ้างอิง ลองดูที่ตัวอย่างภายใต้หัวข้อพึ่งพา: คัดลอกอ้างอิง Mojo ตั้งค่าคุณสมบัติการกำหนดค่าoutputDirectoryเป็น $ {basedir} / target / lib (ฉันเชื่อว่าคุณจะต้องทดสอบ)
หวังว่านี่จะช่วยได้
ทางออกที่ง่ายและสง่างามสำหรับกรณีที่ต้องคัดลอกการอ้างอิงไปยังไดเรกทอรีเป้าหมายโดยไม่ใช้เฟส maven อื่น ๆ (ฉันพบว่ามีประโยชน์มากเมื่อทำงานกับ Vaadin)
ทำตัวอย่าง 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>
จากนั้นเรียกใช้ mvn process-sources
การอ้างอิงไฟล์ jar สามารถพบได้ใน /target/dependency
หากคุณต้องการทำเช่นนี้เป็นครั้งคราว (และไม่ต้องการเปลี่ยน POM ของคุณ) ลองใช้บรรทัดคำสั่งนี้:
การพึ่งพา mvn: การคัดลอกอ้างอิง -DoutputDirectory = $ {project.build.directory} / lib
หากคุณละเว้นอาร์กิวเมนต์สุดท้าย , dependences target/dependencies
ที่มีอยู่ใน
mvn dependency:copy-dependencies -DoutputDirectory=./lib
ลองสิ่งนี้:
<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
แล้วคุณจะพบlib
ในtarget
install
เฟสด้วยprocess-resources
เพื่อให้การอ้างอิงถูกคัดลอกก่อนที่build
เป้าหมายจะทำงาน
เพียงคุณมีตัวอย่างต่อไปนี้ภายใน pom.xml ของ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>
ข้างต้นจะทำงานในpackage
เฟสเมื่อคุณเรียกใช้
mvn clean package
และการอ้างอิงจะถูกคัดลอกไปยัง outputDirectory ที่ระบุไว้ในตัวอย่างเช่น lib
ในกรณีนี้
หากคุณต้องการทำเช่นนั้นเป็นครั้งคราวไม่จำเป็นต้องทำการเปลี่ยนแปลง pom.xml เรียกใช้สิ่งต่อไปนี้:
mvn clean package dependency:copy-dependencies
เพื่อแทนที่ตำแหน่งเริ่มต้นซึ่งก็คือ${project.build.directory}/dependencies
เพิ่มคุณสมบัติของระบบชื่อoutputDirectory
เช่น
-DoutputDirectory=${project.build.directory}/lib
เผื่อว่า
นี่คือสิ่งที่ทำงานสำหรับฉัน:
mvn ติดตั้งการพึ่งพา: copy-dependencies -DincludeScope = runtime -DoutputDirectory = target / lib
หากคุณต้องการที่จะส่งมอบกำของขวดใบสมัครของคุณร่วมกับทุกการอ้างอิงและบางสคริปต์เพื่อเรียก MainClass, ดูที่appassembler-Maven ปลั๊กอิน
การกำหนดค่าต่อไปนี้จะสร้างสคริปต์สำหรับ Window และ Linux เพื่อเรียกใช้แอปพลิเคชัน (ด้วยพา ธ ที่สร้างขึ้นที่อ้างอิงถึงไหทั้งหมด, ดาวน์โหลดการพึ่งพาทั้งหมด (ลงในโฟลเดอร์ lib ด้านล่าง target / appassembler) จากนั้นปลั๊กอินแอสเซมบลี appassembler ไดเรกทอรีเพื่อ zip ซึ่งติดตั้ง / ปรับใช้พร้อมกับ jar ไปยังที่เก็บ
<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>
ตัวอธิบายแอสเซมบลี (ใน src / main / assembly) เพื่อจัดแพคเกจ direcotry เป็น zip จะเป็น:
<assembly>
<id>archive</id>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>${project.build.directory}/appassembler</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
</assembly>
ถ้าคุณทำให้โครงการของคุณเป็นสงครามหรือประเภทหูฟังจะคัดลอกการอ้างอิง
คุณสามารถใช้Shade Pluginเพื่อสร้าง uber jar ซึ่งคุณสามารถรวมการพึ่งพาของบุคคลที่สามทั้งหมด
เพียงเสาะหาสิ่งที่ได้พูดไปแล้วโดยย่อ ฉันต้องการสร้างไฟล์ JAR ที่รันได้ซึ่งรวมถึงการพึ่งพาของฉันพร้อมกับรหัสของฉัน สิ่งนี้ใช้ได้กับฉัน:
(1) ใน pom ภายใต้ <build> <plugins> ฉันรวม:
<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) การรันแอสเซมบลี mvn คอมไพล์: แอสเซมบลีที่ผลิต my-project-0.1-SNAPSHOT-jar-with-dependencies.jar ที่ต้องการในไดเรกทอรีเป้าหมายของโครงการ
(3) ฉันรัน JAR ด้วย java -jar my-project-0.1-SNAPSHOT-jar-with-dependencies.jar
มันเป็นทางออกที่หนักหนาสาหัสสำหรับการฝังการพึ่งพาอย่างมาก แต่ M Assemblyของ Maven ทำหน้าที่หลอกฉัน
@ คำตอบของผู้ขาย Richควรใช้งานได้แม้ว่าในกรณีที่ง่ายกว่าคุณควรจะต้องมีข้อความที่ตัดตอนมาจากคู่มือการใช้งานนี้ :
<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>
หากคุณมีปัญหาเกี่ยวกับการขึ้นต่อกันที่ไม่ปรากฏในไฟล์ WEB-INF / lib เมื่อทำงานบนเซิร์ฟเวอร์ Tomcat ใน Eclipse ให้ดูที่:
คุณเพียงแค่ต้องเพิ่ม Maven Dependencies ใน Properties ของโครงการ> Deployment Assembly