ตอนนี้ maven-3 ได้ยกเลิกการสนับสนุน <uniqueVersion> false </uniqueVersion> สำหรับสิ่งประดิษฐ์สแนปชอตดูเหมือนว่าคุณจำเป็นต้องใช้ SNAPSHOTS ที่ประทับเวลาจริงๆ โดยเฉพาะอย่างยิ่ง m2eclipse ซึ่งใช้ maven 3 ภายในดูเหมือนว่าจะได้รับผลกระทบการอัปเดตสแนปชอตไม่ทำงานเมื่อ SNAPSHOTS ไม่ซ้ำกัน
ดูเหมือนแนวทางปฏิบัติที่ดีที่สุดก่อนที่จะตั้งค่าสแนปชอตทั้งหมดเป็น uniqueVersion = false
ตอนนี้ดูเหมือนว่าจะไม่มีปัญหาใหญ่ที่จะเปลี่ยนไปใช้เวอร์ชันที่ประทับเวลาหลังจากทั้งหมดได้รับการจัดการโดยที่เก็บส่วนกลางของ nexus ซึ่งสามารถลบภาพรวมเก่าในช่วงเวลาปกติได้
ปัญหาคือเวิร์กสเตชันของนักพัฒนาท้องถิ่น พื้นที่เก็บข้อมูลในท้องถิ่นของตนได้อย่างรวดเร็วไม่เติบโตมากขนาดใหญ่ที่มีภาพรวมที่ไม่ซ้ำกัน
จะจัดการกับปัญหานี้อย่างไร?
ตอนนี้ฉันเห็นวิธีแก้ไขที่เป็นไปได้ต่อไปนี้:
- ขอให้นักพัฒนาล้างที่เก็บข้อมูลเป็นระยะ ๆ (ซึ่งนำไปสู่ความยุ่งยากมากมายเนื่องจากต้องใช้เวลานานในการลบและดาวน์โหลดทุกอย่างที่จำเป็นนานขึ้น)
- ตั้งค่าสคริปต์บางส่วนซึ่งจะลบไดเร็กทอรีSNAPSHOTทั้งหมดออกจากที่เก็บในเครื่องและขอให้นักพัฒนาเรียกใช้สคริปต์นั้นเป็นครั้งคราว (ดีกว่าครั้งแรก แต่ก็ยังใช้เวลาพอสมควรในการเรียกใช้และดาวน์โหลดสแนปชอตปัจจุบัน)
- ใช้การอ้างอิง: ปลั๊กอิน purge-local-repository (มีปัญหาเมื่อเรียกใช้จาก eclipse เนื่องจากไฟล์ที่เปิดอยู่จำเป็นต้องเรียกใช้จากแต่ละโครงการ)
- ตั้งค่าเน็กซัสในทุกเวิร์กสเตชันและตั้งค่างานเพื่อล้างสแน็ปช็อตเก่า (ผลลัพธ์ที่ดีที่สุด แต่ฉันไม่ต้องการดูแลเซิร์ฟเวอร์ nexus มากกว่า 50+ เซิร์ฟเวอร์รวมทั้งหน่วยความจำในเวิร์กสเตชันของนักพัฒนาซอฟต์แวร์จะแน่น)
- หยุดใช้ SNAPSHOTS เลย
อะไรคือวิธีที่ดีที่สุดในการป้องกันไม่ให้ที่เก็บข้อมูลในเครื่องของคุณเต็มพื้นที่ฮาร์ดไดรฟ์ของคุณ
อัปเดต:
ในการตรวจสอบความถูกต้องและเพื่อให้ข้อมูลเพิ่มเติมฉันตั้งค่าเซิร์ฟเวอร์ Nexus ขนาดเล็กสร้างสองโปรเจ็กต์ (a และ b) แล้วลอง:
ก:
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.glauche</groupId>
<artifactId>a</artifactId>
<version>0.0.1-SNAPSHOT</version>
<distributionManagement>
<snapshotRepository>
<id>nexus</id>
<name>nexus</name>
<url>http://server:8081/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
</project>
ข:
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.glauche</groupId>
<artifactId>b</artifactId>
<version>0.0.1-SNAPSHOT</version>
<distributionManagement>
<snapshotRepository>
<id>nexus</id>
<name>nexus</name>
<url>http://server:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
<repositories>
<repository>
<id>nexus</id>
<name>nexus</name>
<snapshots>
<enabled>true</enabled>
</snapshots>
<url>http://server:8081/nexus/content/repositories/snapshots/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>de.glauche</groupId>
<artifactId>a</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
ตอนนี้เมื่อฉันใช้ maven และรัน "deploy" บน "a" ฉันจะมี
a-0.0.1-SNAPSHOT.jar
a-0.0.1-20101204.150527-6.jar
a-0.0.1-SNAPSHOT.pom
a-0.0.1-20101204.150527-6.pom
ในที่เก็บในเครื่อง ด้วยเวอร์ชันประทับเวลาใหม่ทุกครั้งที่ฉันรันเป้าหมายการปรับใช้ สิ่งเดียวกันนี้เกิดขึ้นเมื่อฉันพยายามอัปเดต Snapshots จากเซิร์ฟเวอร์ nexus (ปิด "a" Project ลบออกจากที่เก็บในเครื่องสร้าง "b")
ในสภาพแวดล้อมที่มีการสร้างสแนปชอตจำนวนมาก (คิดว่าเซิร์ฟเวอร์ฮัดสัน ... ) reposioty ในเครื่องจะเต็มไปด้วยเวอร์ชันเก่าอย่างรวดเร็ว
อัปเดต 2:
เพื่อทดสอบว่าเหตุใดจึงล้มเหลวฉันได้ทำการทดสอบเพิ่มเติม การทดสอบแต่ละครั้งจะดำเนินการกับทุกสิ่งที่สะอาด (de / glauche ถูกลบจากทั้งสองเครื่องและ nexus)
- mvn ปรับใช้กับ maven 2.2.1:
ที่เก็บในเครื่องบนเครื่อง A มี snapshot.jar + snapshot-timestamp.jar
แต่: มีเพียง jar ที่ประทับเวลาเดียวใน nexus ข้อมูลเมตาจะอ่าน:
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>de.glauche</groupId>
<artifactId>a</artifactId>
<version>0.0.1-SNAPSHOT</version>
<versioning>
<snapshot>
<timestamp>20101206.200039</timestamp>
<buildNumber>1</buildNumber>
</snapshot>
<lastUpdated>20101206200039</lastUpdated>
</versioning>
</metadata>
- รันการอ้างอิงการอัปเดต (บนเครื่อง B) ใน m2eclipse (ฝัง m3 ขั้นสุดท้าย) -> ที่เก็บในเครื่องมี snapshot.jar + snapshot-timestamp.jar :(
- เรียกใช้เป้าหมายแพ็คเกจด้วย maven ภายนอก 2.2.1 -> ที่เก็บในเครื่องมี snapshot.jar + snapshot-timestamp.jar :(
ตกลงลองใช้ maven 3.0.1 ต่อไป (หลังจากลบร่องรอยทั้งหมดของโครงการ a)
ที่เก็บในเครื่องบนเครื่อง A ดูดีกว่าโถที่ไม่ประทับเวลาเพียงอันเดียว
jar ที่ประทับเวลาเพียงอันเดียวใน nexus ข้อมูลเมตาจะอ่าน:
de.glauche a 0.0.1-SNAPSHOT
<snapshot> <timestamp>20101206.201808</timestamp> <buildNumber>3</buildNumber> </snapshot> <lastUpdated>20101206201808</lastUpdated> <snapshotVersions> <snapshotVersion> <extension>jar</extension> <value>0.0.1-20101206.201808-3</value> <updated>20101206201808</updated> </snapshotVersion> <snapshotVersion> <extension>pom</extension> <value>0.0.1-20101206.201808-3</value> <updated>20101206201808</updated> </snapshotVersion> </snapshotVersions>
รันการอ้างอิงการอัปเดต (บนเครื่อง B) ใน m2eclipse (ฝัง m3 ขั้นสุดท้าย) -> ที่เก็บในเครื่องมี snapshot.jar + snapshot-timestamp.jar :(
เรียกใช้เป้าหมายแพ็คเกจด้วย maven ภายนอก 2.2.1 -> ที่เก็บในเครื่องมี snapshot.jar + snapshot-timestamp.jar :(
ดังนั้นเพื่อสรุป: เป้าหมาย "ปรับใช้" ใน maven3 ทำงานได้ดีกว่าใน 2.2.1 ที่เก็บในเครื่องบนเครื่องสร้างดูดี แต่ผู้รับมักจะลงเอยด้วยเวอร์ชันที่มีเวลามากมาย ...
ผมทำอะไรผิดหรือเปล่า ?
อัปเดต 3
ฉันยังทดสอบการกำหนดค่าอื่น ๆ อีกมากมายก่อนอื่นให้แทนที่ nexus ด้วย artifactory -> พฤติกรรมเดียวกัน จากนั้นใช้ไคลเอนต์ linux maven 3 เพื่อดาวน์โหลดสแน็ปช็อตจากตัวจัดการที่เก็บ -> ที่เก็บในเครื่องยังคงมีสแน็ปช็อตที่ประทับเวลา :(