การดาวน์โหลดการอ้างอิง maven ทั้งหมดไปยังไดเร็กทอรีไม่อยู่ในที่เก็บ?


128

ฉันเริ่มแปลงโปรเจ็กต์เป็น maven เพราะฉันต้องการใช้ไลบรารีที่แจกจ่ายในรูปแบบไบนารีบน maven เท่านั้น แต่หลังจากเอาหัวโขกกับกำแพงนานเกินไปฉันตัดสินใจหยุดทำร้ายตัวเองและใช้ มด. ฉันต้องการเพียงแค่ให้ maven ดาวน์โหลด jar และการอ้างอิงสกรรมกริยาทั้งหมดลงในไดเร็กทอรีที่ฉันเลือกเพื่อที่ฉันจะได้ตรวจสอบมันใน SCM ของฉันตามปกติฉันก็สนุกและเป็นนักพัฒนาที่มีความสุขอีกครั้ง
มีความคิดอย่างไรที่จะทำอย่างง่ายดาย?


2
พิจารณาใช้ Ivy และรับการจัดการการพึ่งพาสกรรมกริยาที่คุณต้องการด้วย Ant ที่คุณไว้วางใจ หรือกัดกระสุนและใช้โครงสร้างไดเร็กทอรี Maven
Dave Newton

คุณลองIvyหรือยัง?
Tomasz Nurkiewicz

5
ไม่ แต่ฉันใช้ความอดทนทั้งหมดในการเปลี่ยนในจุดนี้ อาจจะครั้งหน้า. ฉันต้องการกลับไปที่การเขียนโค้ด สามารถทำได้ด้วย maven หรือไม่?
chubbsondubs

คำตอบ:


261

ปลั๊กอิน Maven พึ่งพาอาจจะสามารถแก้ปัญหาของคุณ

หากคุณมีการpomระบุการอ้างอิงโครงการทั้งหมดของคุณสิ่งที่คุณต้องทำคือเรียกใช้

mvn dependency:copy-dependencies

และคุณจะพบtarget/dependenciesโฟลเดอร์ที่เต็มไปด้วยการอ้างอิงทั้งหมดรวมถึงสกรรมกริยา

การเพิ่มคำตอบของ Gustavo จากด้านล่าง : หากต้องการดาวน์โหลดแหล่งอ้างอิงคุณสามารถใช้

mvn dependency:copy-dependencies -Dclassifier=sources

(ผ่านApache Maven Dependency Plugin doc )


1
Thx @Raghuram ฉันกำลังมองหาสิ่งนี้มานานแล้ว
eskalera

แต่ถ้าฉันต้องการคัดลอกการอ้างอิงทั้งหมดไปยัง repo ในพื้นที่ของฉันล่ะ? มันควรจะใช้สำหรับ? ทำไมต้องคัดลอกหากอาจอยู่ใน repo ในเครื่องแล้ว มันเป็นของท้องถิ่นอยู่แล้ว
ses

1
@s สร้าง maven มาตรฐาน (เช่นคอมไพล์ทดสอบแพ็กเกจติดตั้ง ฯลฯ ไม่แน่ใจเกี่ยวกับการตรวจสอบความถูกต้อง) คัดลอกการอ้างอิงทั้งหมดไปยัง repo ในเครื่องของคุณตามค่าเริ่มต้นแล้ว นี่ไม่ใช่เพื่อสิ่งนั้น แต่สำหรับสถานการณ์ที่คุณต้องการการอ้างอิงของแอปไม่ว่าด้วยเหตุผลใดก็ตาม ตอนนี้ฉันกำลังใช้มันเพื่อตรวจสอบไลบรารีที่ขึ้นต่อกันเพื่อหาคำจำกัดความของ API ที่ซ้ำซ้อน (เช่นบางไลบรารีจะมี Javax API ซึ่งอาจขัดแย้งกับเวอร์ชันอื่นของ API เดียวกัน) แต่ก็เป็นการดีเช่นกันหากแอปของคุณต้องการการอ้างอิงที่รวมอยู่ด้วย สำหรับการแจกจ่ายหรืออะไรก็ตาม
Spanky Quigman

1
+1 สำหรับคำตอบที่ชัดเจนกระชับและเป็นประโยชน์ ฉันเพิ่งผ่านการเต้น Maven แบบเดียวกับ OP และแค่ต้องการดึงการอ้างอิงไฟล์ JAR ขอบคุณ! ฉันหวังว่าฉันจะได้ +10
Brandon

@Raghuram ในทางเทคนิคแล้วคุณจะจบลงด้วยสิ่งประดิษฐ์ (แก้ไข) ทั้งหมดใน "เป้าหมาย / การอ้างอิง" นอกจากนี้ยังมีปัญหาที่อาจเกิดขึ้นจากการชนกันของชื่อเนื่องจากพิกัด "groupId" ของการอ้างอิงถูกละเว้น กล่าวอีกนัยหนึ่ง "การพึ่งพา: การพึ่งพาสำเนา" ไม่ได้รักษาโครงสร้างเค้าโครง
whaefelinger

8

จากคำตอบของ@Raghuramฉันพบบทช่วยสอนเกี่ยวกับการคัดลอกการอ้างอิงโครงการเพียงแค่:

  1. เปิดpom.xmlไฟล์โครงการของคุณและค้นหาสิ่งนี้:

    <project>
      [...]
      <build>
        <plugins>
          ...
        </plugins>
      </build>
      [...]
    </project>
  2. แทนที่<plugins> ... </plugins>ด้วย:

    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
          <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
              <goal>copy-dependencies</goal>
            </goals>
            <configuration>
              <outputDirectory>${project.build.directory}/alternateLocation</outputDirectory>
              <overWriteReleases>false</overWriteReleases>
              <overWriteSnapshots>false</overWriteSnapshots>
              <overWriteIfNewer>true</overWriteIfNewer>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  3. และเรียก maven ภายในบรรทัดคำสั่ง mvn dependency:copy-dependencies

หลังจากเสร็จสิ้นมันจะสร้างโฟลเดอร์target/dependencyภายในการjarอ้างอิงทั้งหมดบนไดเร็กทอรีปัจจุบันที่มีpom.xmlชีวิตอยู่


ฉันจะพิมพ์คำสั่ง "mvn" ได้ที่ไหน คลิกขวาที่ maven-project-> Maven -> .. ??
Baked Inhalf

ในบรรทัดคำสั่งเทอร์มินัลบนโฟลเดอร์ที่เปิดpom.xmlไฟล์
ผู้ใช้

1
ไม่ได้ผล ฉันคิดว่า Maven ถูกติดตั้งเป็นปลั๊กอินเท่านั้น ฉันต้องดาวน์โหลด Maven ด้วยตนเองเช่นกัน แล้วmvn dependency:copy-dependenciesทำงาน!
Baked Inhalf

8

ในที่สุดฉันก็หาวิธีใช้ Maven ได้ จากภายใน Eclipse ให้สร้างโครงการ Maven ใหม่

ดาวน์โหลด Maven แยกไฟล์เก็บถาวรเพิ่ม/binโฟลเดอร์ไปยังพา ธ

ตรวจสอบการติดตั้งจากบรรทัดคำสั่งโดยเรียกใช้mvn -v(จะพิมพ์เวอร์ชันและเส้นทางการติดตั้ง java)

เปลี่ยนเป็นโฟลเดอร์รูทของโปรเจ็กต์ (ที่pom.xmlอยู่) และเรียกใช้:

mvn dependency:copy-dependencies

jar /target/dependencyไฟล์ทั้งหมดจะถูกดาวน์โหลดไป

ในการตั้งค่าไดเรกทอรีผลลัพธ์อื่น:

mvn dependency:copy-dependencies -DoutputDirectory="c:\temp"

ตอนนี้เป็นไปได้ที่จะใช้ Maven-project นี้ซ้ำสำหรับการดาวน์โหลดที่ขึ้นต่อกันทั้งหมดโดยเปลี่ยน pom.xml

เพิ่ม jars ให้กับโปรเจ็กต์ java โดย build path -> configuration build path -> libraries -> add JARs ..


1
ไม่จำเป็นต้องเป็นโปรเจ็กต์คราส ฉันเปิดไฟล์ jar ใน Java Decompiler และคัดลอก pom.xml ไปยังโฟลเดอร์ว่าง ฉันเรียกmvn dependency:copy-dependenciesตามที่คุณอธิบายจากโฟลเดอร์นั้นและได้คัดลอกไฟล์ jar ทั้งหมดลงในโฟลเดอร์เดียว
Bernhard Döbler


2

โปรดตรวจสอบว่าคุณมีไฟล์กำหนดค่าบางไฟล์ใน${MAVEN_HOME}/confไดเร็กทอรีเช่นsettings.xml. ไฟล์เหล่านั้นจะลบล้างการตั้งค่าจาก.m2โฟลเดอร์และด้วยเหตุนี้โฟลเดอร์ที่เก็บจาก.m2อาจไม่สามารถมองเห็นได้หรือถูกละทิ้ง

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