Bây giờ maven-3 đã giảm hỗ trợ cho <uniqueVersion> false </uniqueVersion> cho đồ tạo tác ảnh chụp nhanh, có vẻ như bạn thực sự cần sử dụng SNAPSHOTS có dấu thời gian. Đặc biệt là m2eclipse, sử dụng maven 3 bên trong dường như bị ảnh hưởng với nó, ảnh chụp nhanh cập nhật không hoạt động khi SNAPSHOTS không phải là duy nhất.
Có vẻ như phương pháp hay nhất trước đây là đặt tất cả ảnh chụp nhanh thành uniqueVersion = false
Bây giờ, có vẻ như không có vấn đề gì lớn khi chuyển sang phiên bản có dấu thời gian, sau khi tất cả chúng được quản lý bởi một kho lưu trữ nexus trung tâm, có thể xóa các ảnh chụp nhanh cũ trong các cuộc gọi thông thường.
Vấn đề là các máy trạm của nhà phát triển cục bộ. Kho lưu trữ cục bộ của họ nhanh chóng phát triển rất lớn với các ảnh chụp nhanh độc đáo.
Làm thế nào để đối phó với vấn đề này?
Ngay bây giờ tôi thấy các giải pháp khả thi sau đây:
- Yêu cầu các nhà phát triển thanh lọc kho lưu trữ theo định kỳ (điều này dẫn đến nhiều sự cố, vì mất nhiều thời gian để xóa và thậm chí lâu hơn để tải xuống mọi thứ cần thiết)
- Thiết lập một số tập lệnh xóa tất cả các thư mục SNAPSHOT khỏi kho lưu trữ cục bộ và yêu cầu các nhà phát triển chạy tập lệnh đó theo thời gian (tốt hơn so với tập lệnh đầu tiên, nhưng vẫn mất khá nhiều thời gian để chạy và tải xuống các ảnh chụp nhanh hiện tại)
- sử dụng plugin phụ thuộc: purge-local-repository (Có vấn đề khi chạy từ eclipse, do các tệp đang mở, cần được chạy từ mỗi dự án)
- thiết lập nexus trên mọi máy trạm và thiết lập công việc để xóa các ảnh chụp nhanh cũ (kết quả tốt nhất, nhưng tôi không muốn duy trì hơn 50 máy chủ nexus, cộng với bộ nhớ luôn chật hẹp trên các máy trạm của nhà phát triển)
- ngừng sử dụng SNAPSHOTS
Cách tốt nhất để giữ cho kho lưu trữ cục bộ của bạn không làm đầy dung lượng ổ cứng của bạn là gì?
Cập nhật:
Để xác minh vẻ đẹp và để cung cấp thêm thông tin, tôi thiết lập một máy chủ nexus nhỏ, hãy xây dựng hai dự án (a và b) và thử:
a:
<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>
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>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>
Bây giờ, khi tôi sử dụng maven và chạy "deploy" trên "a", tôi sẽ có
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
trong kho lưu trữ cục bộ. Với phiên bản dấu thời gian mới mỗi khi tôi chạy mục tiêu triển khai. Điều tương tự cũng xảy ra khi tôi cố gắng cập nhật Ảnh chụp nhanh từ máy chủ nexus (đóng "a" Dự án, xóa nó khỏi kho lưu trữ cục bộ, xây dựng "b")
Trong một môi trường có nhiều ảnh chụp nhanh được xây dựng (máy chủ hudson ...), reposioty cục bộ lấp đầy với các phiên bản cũ nhanh chóng
Cập nhật 2:
Để kiểm tra cách thức và lý do tại sao điều này không thành công, tôi đã thực hiện thêm một số bài kiểm tra. Mỗi bài kiểm tra được chạy với mọi thứ sạch sẽ (de / glauche bị xóa khỏi cả máy và nexus)
- mvn triển khai với maven 2.2.1:
kho lưu trữ cục bộ trên máy A có chứa snapshot.jar + snapshot-timestamp.jar
NHƯNG: chỉ có một lọ có dấu thời gian trong nexus, siêu dữ liệu cho biết:
<?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>
- chạy bản cập nhật phụ thuộc (trên máy B) trong m2eclipse (nhúng m3 cuối cùng) -> kho lưu trữ cục bộ có snapshot.jar + snapshot-timestamp.jar :(
- chạy gói mục tiêu với maven bên ngoài 2.2.1 -> kho lưu trữ cục bộ có snapshot.jar + snapshot-timestamp.jar :(
Ok, tiếp theo hãy thử với maven 3.0.1 (sau khi xóa tất cả các dấu vết của dự án a)
kho lưu trữ cục bộ trên máy A trông đẹp hơn, chỉ có một jar không có dấu thời gian
chỉ có một lọ có dấu thời gian trong nexus, siêu dữ liệu cho biết:
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>
chạy bản cập nhật phụ thuộc (trên máy B) trong m2eclipse (nhúng m3 cuối cùng) -> kho lưu trữ cục bộ có snapshot.jar + snapshot-timestamp.jar :(
chạy gói mục tiêu với maven bên ngoài 2.2.1 -> kho lưu trữ cục bộ có snapshot.jar + snapshot-timestamp.jar :(
Vì vậy, tóm lại: Mục tiêu "triển khai" trong maven3 hoạt động tốt hơn trong 2.2.1, kho lưu trữ cục bộ trên máy tạo có vẻ ổn. Tuy nhiên, đầu thu luôn kết thúc với rất nhiều phiên bản theo thời gian ...
Tôi đang làm gì sai?
Cập nhật 3
Tôi cũng đã thử nghiệm nhiều cấu hình khác nhau, đầu tiên thay thế nexus bằng nhân tạo -> hành vi tương tự. Sau đó, sử dụng máy khách linux maven 3 để tải xuống ảnh chụp nhanh từ trình quản lý kho lưu trữ -> kho lưu trữ cục bộ vẫn có ảnh chụp nhanh có dấu thời gian :(