ฉันจะดาวน์โหลดสิ่งประดิษฐ์ Maven เฉพาะในบรรทัดคำสั่งเดียวได้อย่างไร


168

ฉันสามารถติดตั้งสิ่งประดิษฐ์ด้วยinstall:install-fileแต่ฉันจะดาวน์โหลดสิ่งประดิษฐ์ได้อย่างไร

ตัวอย่างเช่น:

mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST

11
ระวังว่าปลั๊กอินต้องการ 'repoUrl' แม้จะมีเอกสารอธิบายว่า 'repositoryUrl' มันสามารถทำให้คุณบ้าคลั่งได้เหมือนกันกับฉัน!
zakmck

เอกสาร ( maven.apache.org/plugins/maven-dependency-plugin/get-mojo.html ) แสดงทั้ง xml params (<repositoryUrl> ... </repositoryUrl>) และคุณสมบัติผู้ใช้บรรทัดคำสั่ง (mvn .. . -DrepoUrl = "... ") ตัวอย่างเฉพาะนี้เลิกใช้แล้วไม่ต้องกังวล ตอนนี้มันเป็น repository ระยะไกลที่เหมือนกัน (ทั้งสองอย่าง); แต่โปรดทราบว่าพารามิเตอร์ "ปลายทาง" เป็นคุณสมบัติผู้ใช้ "-Ddest = ... "; เช่น => mvn org.apache.maven.plugins: maven-dependency-plugin: 2.5.1: รับ -DremoteRepositories = repo.maven.apache.org -Dartifact = org.apache.ant: ant: 1.8.1 -Ddest = ant-1.8.1.jar (ผลลัพธ์: ant-1.8.1.jar ในไดเรกทอรีปัจจุบัน)
michael

คำตอบ:


182

คุณสามารถใช้ปลั๊กอินพึ่งพา 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)


1
ใช่และฉันเพิ่งได้รับการแก้ไขโดยใช้การพึ่งพา: รับเป้าหมาย การพึ่งพา mvn: รับ -Dartifact = org.apache.archiva: archiva-webapp: ล่าสุด: war -DrepoUrl = repository.sonatype.org/content/repositories/central ความไม่สะดวกเพียงอย่างเดียวคือฉันต้องให้ตัวเลือก repoUrl ข้อมูลของคุณช่วยได้จริงฉันใช้ mvn 2.2.1 (rdebian-1) และฉันไม่ได้แตะ pluginRegistry ขอบคุณ
XièJìléi

2
เป้าหมาย "รับ" นี้ดูเหมือนว่า "เพิ่งทำงาน" อีกครั้ง (ไม่จำเป็นต้องกำหนดค่า / แฮ็คเพิ่มเติมปลั๊กอิน 2.5.1, mvn 3.0.4): = example => mvn org.apache.maven.plugins mvn: maven-dependency-plugin: 2.5.1: รับ -DremoteRepositories = repo.maven.apache.org -Dartifact = org.apache.ant: ant: 1.8.1 -Ddest = ant-1.8.1.jar
michael

ความแตกต่างระหว่างรับและติดตั้งคืออะไร พวกเขาทั้งสองไม่ได้ไปที่ repo Maven ในพื้นที่ของคุณหรือไม่ - แก้ไข: รอไม่ฉันเข้าใจแล้ว การติดตั้งสำหรับdeps ท้องถิ่นของคุณที่จะคัดลอกไปยัง repo m2 ท้องถิ่นรับ fetches ได้จากระยะไกล
Chris2048

4
พบมันเพียงแค่ผนวก:jar:sourcesเข้ากับสิ่งประดิษฐ์โปรดดูstackoverflow.com/a/31109185/537554
ryenus

1
ด้วย Maven รุ่นใหม่กว่า (เช่น 3.6.0) คุณยังสามารถทำได้ด้วย justmvn dependency:get -Dartifact=group-id:artefact-id:version
scrutari

93

ด้วยเวอร์ชันล่าสุด (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 ที่ให้คำตอบที่ยอดเยี่ยมของเขาในตอนแรกฉันกำลังเพิ่มคำตอบอีกอันเพราะมันไม่เหมาะกับความคิดเห็นและมันจะครอบคลุมเกินไปสำหรับการแก้ไข)


ฉันใช้สิ่งนี้เพื่อดาวน์โหลด Maven Archetype วิธีนี้ใช้งานได้ดีหากคุณอยู่หลังพรอกซีและทำงานกับ eclipse ซึ่งไม่สามารถลงทะเบียนเพื่อระบุ maven archtypes แม้ว่าคุณจะกำหนดค่าพร็อกซีในการตั้งค่า xml แล้วก็ตาม
Acewin

mvn org.apache.maven.plugins: maven-dependency-plugin: 2.8: รับ -Dartifact = org.apache.maven.archetypes: maven-archetype-webapp: 1.0: jar
Acewin

คุณสามารถอธิบายความjar:sourcesหมาย / ความหมายของอะไรได้บ้าง ทำไมคุณต้องระบุ "jar" และ "แหล่งที่มา" หมายความว่ามันจะดาวน์โหลดการอ้างอิงเพิ่มเติมที่วัตถุต้องการ
red888

"jar" เป็นประเภทบรรจุภัณฑ์ "แหล่งที่มา" เป็นตัวจําแนก ด้วยการอ้างอิงหนึ่ง (ตัวอย่างเช่นhibernate-core ) อาจมีมากกว่าหนึ่งสิ่งประดิษฐ์ บ่อยครั้งที่มี: 1. ไลบรารีแบบไบนารีเท่านั้น, 2. sources, ไฟล์ JAR ที่มีแหล่ง Java เท่านั้น, 3. javadoc, ไฟล์ JAR ที่มีเอกสาร API เท่านั้น ดูเพิ่มเติม: Maven เริ่มต้นสิ่งประดิษฐ์จัดการ
Danilo Piazzalunga

ขอบคุณเกี่ยวกับการชี้แจงวิธีการใช้[:classifier]อย่างถูกต้องหากฉันมีโปรแกรมเสริม assemlby สร้างไฟล์ zip ที่ฉันต้องการดาวน์โหลด
jonashackt

43

นี่คือสิ่งที่ใช้ได้ผลสำหรับฉันในการดาวน์โหลดเวอร์ชันล่าสุดของสิ่งประดิษฐ์ที่เรียกว่า "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ไดเรกทอรี
yair

15
destพารามิเตอร์จะเลิกและสามารถถูกแทนที่ด้วย invokation ของcopyหลังจากที่getชอบโดย: mvn dependency:copy -Dartifact=com.foo.something:component:LATEST:jar -DoutputDirectory=.(ในกรณีนี้การวางขวดในไดเรกทอรีการทำงาน)
Jacob Raihle

@JacobRaihle แล้วฉันไม่สามารถดาวน์โหลดไฟล์ได้โดยไม่ต้อง pom.xml Goal requires a project to execute but there is no POM in this directoryรับข้อผิดพลาดต่อไปนี้:
Athlan

2
@ การสนับสนุน No-pom อาจเป็นคุณลักษณะใหม่กว่านี้ฉันคิดว่า ทุกวันนี้ฉันก็สามารถเรียกใช้mvn dependency:copy(โดยdependency:getครั้งแรก)
Jacob Raihle

26

เกี่ยวกับวิธีรับไบนารีสิ่งประดิษฐ์คำตอบของ 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


17

หนึ่งสามารถใช้การพึ่งพา: คัดลอก ( 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ของเขาในตอนแรกฉันกำลังเพิ่มคำตอบอื่น)


11

ซับในหนึ่งเพื่อดาวน์โหลดสิ่งประดิษฐ์ 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"

3
downvoted โซลูชันนี้ดูเหมือนว่าจะทำงานกับผลิตภัณฑ์ที่เก็บข้อมูลเฉพาะเท่านั้น
Martín Straus

1
ทำงานได้ดีกับ Nexus 2.x ไม่ทำงานกับ 3.x (ยัง)
HDave

curl: ตัวเลือก -J ไม่เป็นที่รู้จัก
xuehui

2

การใช้งานจากเอกสารอย่างเป็นทางการ:

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"


1

นี่คือตัวอย่างการใช้ 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

0

คำสั่ง:

mvn install:install-file 

โดยทั่วไปจะติดตั้งสิ่งประดิษฐ์ในที่เก็บในเครื่องของคุณดังนั้นคุณไม่จำเป็นต้องดาวน์โหลด อย่างไรก็ตามหากคุณต้องการแบ่งปันสิ่งประดิษฐ์ของคุณกับผู้อื่นคุณจะต้องปรับใช้สิ่งประดิษฐ์กับที่เก็บส่วนกลางดูปลั๊กอินปรับใช้สำหรับรายละเอียดเพิ่มเติม

นอกจากนี้การเพิ่มการพึ่งพา POM ของคุณจะดึงสิ่งประดิษฐ์ของบุคคลที่สามที่คุณต้องการโดยอัตโนมัติเมื่อคุณสร้างโครงการของคุณ เช่นนี้จะดาวน์โหลดสิ่งประดิษฐ์จากพื้นที่เก็บข้อมูลส่วนกลาง


0

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:[,)"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.