ฉันสามารถติดตั้งสิ่งประดิษฐ์ด้วยinstall:install-file
แต่ฉันจะดาวน์โหลดสิ่งประดิษฐ์ได้อย่างไร
ตัวอย่างเช่น:
mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST
ฉันสามารถติดตั้งสิ่งประดิษฐ์ด้วยinstall:install-file
แต่ฉันจะดาวน์โหลดสิ่งประดิษฐ์ได้อย่างไร
ตัวอย่างเช่น:
mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST
คำตอบ:
คุณสามารถใช้ปลั๊กอินพึ่งพา mavenซึ่งมีdependency:get
เป้าหมายดีตั้งแต่รุ่น 2.1 ไม่ต้องการ pom ทุกอย่างเกิดขึ้นในบรรทัดคำสั่ง
เพื่อให้แน่ใจว่าจะพบdependency:get
เป้าหมายคุณต้องบอกให้ Maven ใช้เวอร์ชัน 2.1 อย่างชัดเจนเช่นคุณต้องใช้ชื่อที่ผ่านการรับรองโดยสมบูรณ์ของปลั๊กอินรวมถึงเวอร์ชัน:
mvn org.apache.maven.plugins:maven-dependency-plugin:2.1:get \
-DrepoUrl=url \
-Dartifact=groupId:artifactId:version
อัปเดต:ด้วย Maven เวอร์ชันเก่า (ก่อนหน้า 2.1) เป็นไปได้ที่จะทำงานได้dependency:get
ตามปกติ (โดยไม่ต้องใช้ชื่อและรุ่นที่ผ่านการรับรองโดยสมบูรณ์) โดยบังคับให้สำเนา Maven ของคุณใช้ปลั๊กอินรุ่นที่ระบุ
สามารถทำได้ดังนี้:
1. เพิ่มบรรทัดต่อไปนี้ภายใน<settings>
องค์ประกอบของ~/.m2/settings.xml
ไฟล์ของคุณ:
<usePluginRegistry>true</usePluginRegistry>
2. เพิ่มไฟล์ที่~/.m2/plugin-registry.xml
มีเนื้อหาต่อไปนี้:
<?xml version="1.0" encoding="UTF-8"?>
<pluginRegistry xsi:schemaLocation="http://maven.apache.org/PLUGIN_REGISTRY/1.0.0 http://maven.apache.org/xsd/plugin-registry-1.0.0.xsd"
xmlns="http://maven.apache.org/PLUGIN_REGISTRY/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<useVersion>2.1</useVersion>
<rejectedVersions/>
</plugin>
</plugins>
</pluginRegistry>
แต่ดูเหมือนว่ามันจะไม่ทำงานอีกต่อไปกับ maven 2.1 / 2.2 จริงตามที่รู้เบื้องต้นเกี่ยวกับปลั๊กอิน Registryลักษณะของการplugin-registry.xml
ได้รับการออกแบบใหม่ (สำหรับการพกพา) และรีจิสทรีปลั๊กอินขณะนี้อยู่ในสภาพกึ่งเฉยภายใน Maven 2 ดังนั้นฉันคิดว่าเราต้องใช้ชื่อยาวในตอนนี้ (เมื่อใช้ปลั๊กอินที่ไม่มี pom ซึ่งเป็นแนวคิดเบื้องหลังdependency:get
)
:jar:sources
เข้ากับสิ่งประดิษฐ์โปรดดูstackoverflow.com/a/31109185/537554
mvn dependency:get -Dartifact=group-id:artefact-id:version
ด้วยเวอร์ชันล่าสุด (2.8) ของปลั๊กอิน Maven Dependency การดาวน์โหลดสิ่งประดิษฐ์จาก Maven Central Repository นั้นง่ายมากเช่น:
mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -Dartifact=groupId:artifactId:version[:packaging[:classifier]]
ที่ไหนgroupId:artifactId:version
ฯลฯ เป็นพิกัด Maven
ตัวอย่างทดสอบกับ Maven 2.0.9, Maven 2.2.1 และ Maven 3.0.4:
mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -Dartifact=org.hibernate:hibernate-entitymanager:3.4.0.GA:jar:sources
(ขอบคุณ Pascal Thivent ที่ให้คำตอบที่ยอดเยี่ยมของเขาในตอนแรกฉันกำลังเพิ่มคำตอบอีกอันเพราะมันไม่เหมาะกับความคิดเห็นและมันจะครอบคลุมเกินไปสำหรับการแก้ไข)
jar:sources
หมาย / ความหมายของอะไรได้บ้าง ทำไมคุณต้องระบุ "jar" และ "แหล่งที่มา" หมายความว่ามันจะดาวน์โหลดการอ้างอิงเพิ่มเติมที่วัตถุต้องการ
sources
, ไฟล์ JAR ที่มีแหล่ง Java เท่านั้น, 3. javadoc
, ไฟล์ JAR ที่มีเอกสาร API เท่านั้น ดูเพิ่มเติม: Maven เริ่มต้นสิ่งประดิษฐ์จัดการ
[:classifier]
อย่างถูกต้องหากฉันมีโปรแกรมเสริม assemlby สร้างไฟล์ zip ที่ฉันต้องการดาวน์โหลด
นี่คือสิ่งที่ใช้ได้ผลสำหรับฉันในการดาวน์โหลดเวอร์ชันล่าสุดของสิ่งประดิษฐ์ที่เรียกว่า "component.jar" กับ Maven 3.1.1 ในตอนท้าย (คำแนะนำอื่น ๆ ไม่ได้ส่วนใหญ่เนื่องจากการเปลี่ยนแปลงเวอร์ชัน Maven ที่ฉันเชื่อ)
นี่เป็นการดาวน์โหลดไฟล์และคัดลอกลงในไดเรกทอรีการทำงานในเครื่อง
จากทุบตี:
mvn dependency:get \
-DrepoUrl=http://.../ \
-Dartifact=com.foo.something:component:LATEST:jar \
-Dtransitive=false \
-Ddest=component.jar \
-DrepoUrl
ฉันเดาว่ามันก็บอกเป็นนัยจากปอมของฉัน นอกจากนี้ผมไม่ได้ใช้-Ddest
เป็นที่จริงผมไม่ได้ต้องการที่จะดาวน์โหลดไปมันปกติ.m2
ไดเรกทอรี
dest
พารามิเตอร์จะเลิกและสามารถถูกแทนที่ด้วย invokation ของcopy
หลังจากที่get
ชอบโดย: mvn dependency:copy -Dartifact=com.foo.something:component:LATEST:jar -DoutputDirectory=.
(ในกรณีนี้การวางขวดในไดเรกทอรีการทำงาน)
Goal requires a project to execute but there is no POM in this directory
รับข้อผิดพลาดต่อไปนี้:
mvn dependency:copy
(โดยdependency:get
ครั้งแรก)
เกี่ยวกับวิธีรับไบนารีสิ่งประดิษฐ์คำตอบของ Pascal Thiventคือมัน แต่เพื่อให้ได้แหล่ง jar สิ่งประดิษฐ์เราสามารถใช้:
mvn dependency:get -Dartifact=groupId:artifactId:version:jar:sources
เช่น
mvn dependency:get -Dartifact=junit:junit:4.12:jar:sources
นี้ทำงานได้เพราะพารามิเตอร์จริงประกอบด้วยartifact
groupId:artifactId:version[:packaging][:classifier]
เพียงบรรจุภัณฑ์และลักษณนามเป็นตัวเลือก
เมื่อใช้jar
เป็นบรรจุภัณฑ์และsources
เป็นตัวแยกประเภทปลั๊กอินการพึ่งพา maven เข้าใจว่าเรากำลังขอไห้แหล่งข้อมูลไม่ใช่ขวดประดิษฐ์
น่าเสียดายที่ตอนนี้ไม่สามารถดาวน์โหลดไฟล์ jar ได้ในขณะนี้ซึ่งเหมาะสม แต่ฉันเชื่อว่ามันสามารถเคารพตัวเลือกได้downloadSources
เช่นเดียวกับปลั๊กอิน maven eclipse
หนึ่งสามารถใช้การพึ่งพา: คัดลอก ( http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html ) ซึ่งใช้รายการของสิ่งประดิษฐ์ที่กำหนดไว้ในส่วนการกำหนดค่าปลั๊กอินและคัดลอกไปยังตำแหน่งที่ระบุ เปลี่ยนชื่อพวกเขาหรือลอกรุ่นหากต้องการ เป้าหมายนี้สามารถแก้ไขสิ่งประดิษฐ์จากที่เก็บแบบรีโมตหากไม่มีอยู่ในที่เก็บโลคัลหรือเครื่องปฏิกรณ์
คุณสมบัติทั้งหมดของปลั๊กอินไม่สามารถใช้ใน maven CLI สามารถระบุคุณสมบัติที่มีคุณสมบัติ "คุณสมบัติของผู้ใช้:" ได้ ในตัวอย่างด้านล่างฉันกำลังดาวน์โหลด junit ไปยังโฟลเดอร์ temp ของฉันและลอก vesion ออกจากไฟล์ jar
mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:copy -Dartifact=junit:junit:4.11 -DoutputDirectory=/tmp -Dmdep.stripVersion=true
โดยที่ifact = junit: junit: 4.11 คือพิกัด maven และคุณระบุ artifcat เป็น groupId :ifactId: version [: packaging [: classifier]]
(ขอบคุณ Pascal Thivent ที่ให้https://stackoverflow.com/a/18632876/2509415ของเขาในตอนแรกฉันกำลังเพิ่มคำตอบอื่น)
ซับในหนึ่งเพื่อดาวน์โหลดสิ่งประดิษฐ์ maven ล่าสุดโดยไม่ต้อง mvn:
curl -O -J -L "https://repository.sonatype.org/service/local/artifact/maven/content?r=central-proxy&g=io.staticcdn.sdk&a=staticcdn-sdk-standalone-optimizer&e=zip&v=LATEST"
การใช้งานจากเอกสารอย่างเป็นทางการ:
https://maven.apache.org/plugins/maven-dependency-plugin/usage.html#dependency:get
สำหรับกรณีของฉันดูคำตอบด้านล่าง:
mvn dependency:get -Dartifact=$2:$3:$4:$5 -DremoteRepositories=$1 -Dtransitive=false
mvn dependency:copy -Dartifact=$2:$3:$4:$5 -DremoteRepositories=$1 -Dtransitive=false -DoutputDirectory=$6
#mvn dependency:get -Dartifact=com.huya.mtp:hynswup:1.0.88-SNAPSHOT:jar -DremoteRepositories=http://nexus.google.com:8081/repository/maven-snapshots/ -Dtransitive=false
#mvn dependency:copy -Dartifact=com.huya.mtp:hynswup:1.0.88-SNAPSHOT:jar -DremoteRepositories=http://nexus.google.com:8081/repository/maven-snapshots/ -Dtransitive=false -DoutputDirectory=.
ใช้คำสั่ง "mvn dependency: get" เพื่อดาวน์โหลด aritfact ที่ระบุและใช้คำสั่ง "mvn dependency: copy" เพื่อคัดลอกส่วนที่ดาวน์โหลดมาไปยังปลายทาง dir "-DoutputDirectory"
นี่คือตัวอย่างการใช้ ASM-7 โดยใช้ Maven 3.6:
mvn dependency:get -DremoteRepositories=maven.apache.org -Dartifact=org.ow2.asm:7.0:sources:jar
หรือคุณสามารถดาวน์โหลด jar ได้จากที่นี่: https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asmแล้ว
mvn install:install-file -DgroupId=org.ow2.asm -DartifactId=asm -Dversion=7.0 -Dclassifier=sources -Dpackaging=jar -Dfile=/path/to/asm-7.0.jar
คำสั่ง:
mvn install:install-file
โดยทั่วไปจะติดตั้งสิ่งประดิษฐ์ในที่เก็บในเครื่องของคุณดังนั้นคุณไม่จำเป็นต้องดาวน์โหลด อย่างไรก็ตามหากคุณต้องการแบ่งปันสิ่งประดิษฐ์ของคุณกับผู้อื่นคุณจะต้องปรับใช้สิ่งประดิษฐ์กับที่เก็บส่วนกลางดูปลั๊กอินปรับใช้สำหรับรายละเอียดเพิ่มเติม
นอกจากนี้การเพิ่มการพึ่งพา POM ของคุณจะดึงสิ่งประดิษฐ์ของบุคคลที่สามที่คุณต้องการโดยอัตโนมัติเมื่อคุณสร้างโครงการของคุณ เช่นนี้จะดาวน์โหลดสิ่งประดิษฐ์จากพื้นที่เก็บข้อมูลส่วนกลาง
LATEST
เลิกใช้แล้วลองกับช่วง [,)
./mvnw org.apache.maven.plugins:maven-dependency-plugin:3.1.1:get \
-DremoteRepositories=repoId::default::https://nexus/repository/maven-releases/ \
"-Dartifact=com.acme:foo:[,)"