Tải xuống Maven có .lastUpdated dưới dạng phần mở rộng


80

Tôi có một thiết lập Eclipse với m2eclipse và lật đổ. Tôi đã nhập một dự án maven2 từ svn. Nhưng tôi nhận được thông báo lỗi rằng thiếu một loạt các tạo tác (ví dụ: Thiếu tạo tác org.springframework: spring-test: jar: 3.0.1.RELEASE: test).

Nếu tôi tìm trong kho lưu trữ của mình, tôi thấy các tệp jar ở đó nhưng chúng có thêm phần mở rộng .lastUpdated. Tại sao maven lại thêm .lastUpdated vào lọ? Và quan trọng hơn: tôi có thể sửa lỗi này bằng cách nào?

Không có đề cập đến loại lastUpdated trong POM của tôi.

Câu trả lời:


59

Các tệp này cho Maven biết rằng nó đã cố gắng lấy bản lưu trữ bằng cách tải xuống, nhưng không thành công. Để tiết kiệm băng thông, nó sẽ không thử lại lần nữa cho đến khi hết một khoảng thời gian nhất định được mã hóa trong tệp. Chuyển đổi dòng lệnh -U buộc maven thực hiện cập nhật trước khoảng thời gian thử lại. Điều này có thể cần thiết nếu bạn cố gắng xây dựng trong khi bị ngắt kết nối khỏi mạng.

Phương pháp xóa tệp hoạt động với hầu hết các phiên bản của maven, nhưng vì các tệp là vật lưu niệm bên trong cho maven, tôi không khuyến nghị phương pháp này. Không có gì đảm bảo rằng thông tin này không được tham chiếu hoặc lưu giữ ở nơi khác và việc thao túng như vậy có thể làm hỏng hệ thống.


Tôi đã thử mvn -U clean, nhưng nó không khắc phục được sự cố. Tui bỏ lỡ điều gì vậy?
MiguelMunoz

Tuyên bố cuối cùng của bạn trong đoạn đầu tiên nghe có vẻ mâu thuẫn với tôi khi là một người mới về chủ đề này - Điều này có thể cần thiết nếu bạn cố gắng xây dựng trong khi ngắt kết nối khỏi mạng. Nếu tôi đang cố gắng trong khi bị ngắt kết nối, thì -U sẽ thử tải xuống từ kho lưu trữ từ xa và sẽ thất bại, theo cách giải thích của tôi về những gì bạn đã nói.
Sandeepan Nath,

Ý tôi là, "cài đặt -U có thể trở nên cần thiết nếu bạn đã cố gắng xây dựng trong khi ngắt kết nối khỏi mạng và điểm đánh dấu đã được đặt."
Jörn Guy Süß

14

Như rperez đã nói, tôi sử dụng để xóa tất cả các .lastUpdatedtệp đó. Trong Linux, tôi đã tạo một tập lệnh nhỏ để giữ cho nó đơn giản :

find -name \*.lastUpdated -exec rm -fv {} +

Chỉ cần tạo một tệp với nội dung trước đó và đưa nó vào kho lưu trữ Maven cục bộ của bạn. Thường thì sẽ như vậy ~/.m2/repository.


2
trong zsh:rm ~/.m2/repository/**/*.lastUpdated
Dacav

3
Bạn cũng có thể chỉ cần sử dụng find của deletelá cờ để xóa các tập tin mà nó tìm thấy, thay vì execing rmvề kết quả. Ví dụ:find ~/.m2 -name *.lastUpdated -delete
spaaarky21

7

Tôi đã cài đặt Maven2 và chạy biên dịch mvn từ dòng lệnh. Điều này dường như đã giải quyết được vấn đề


Biên dịch bằng dòng lệnh đã giải quyết vấn đề này cho tôi. Tôi nghĩ rằng đây có thể là một vấn đề m2eclipse.
TAN70,

1
Chạy trên Windows 7 Professional SP 1, vào năm 2017, tôi đã gặp vấn đề tương tự với trình cắm thêm Eclipse và đã từ bỏ nó để chuyển sang CLI, cung cấp các báo cáo hoàn chỉnh hơn, có thể sử dụng được mà tôi có thể lưu, nhập vào Excel và tạo tất cả các loại báo cáo hữu ích bao gồm các gói bị thiếu, các tệp không tải xuống được, các POM và JAR chưa được ghép nối và các số liệu thống kê hữu ích khác.
David A. Gray

2

Nếu bạn gặp sự cố này và đang sử dụng Nexus, thì có thể bạn đã xác định quy tắc định tuyến không chính xác. Tôi đã tự mình xử lý sự cố này và các tệp mà nó đang tải xuống đã được đặt tên chính xác, tại URL thích hợp mà nó đang xem, nhưng tất cả chúng đều có .lastUpdatedphần mở rộng và thông báo lỗi là nội dung.


1

bạn có thể gặp sự cố với một số hiện vật được truy xuất từ ​​kho lưu trữ. ví dụ Spring framework có kho lưu trữ riêng của nó. xtension này được thêm vào khi không thể tải xuống đầy đủ cấu phần phần mềm. thêm kho lưu trữ khuôn khổ mùa xuân vào pom hoặc settings.xml của bạn, xóa thư mục bao gồm các lọ bị hỏng và bắt đầu lại


Đồng ý. Thay vì một pom hoặc jar hợp lệ, thường một pom hoặc jar kết thúc bằng lastUpdate chỉ có kích thước 2k, có nội dung giống như một bản ghi lỗi. Thường là kết quả của "thất bại trong việc thu thập phụ thuộc vào ..."
Tiina

Đó là một cách nghĩ thú vị của họ; Tôi luôn nghĩ về chúng như các thực thể riêng biệt (tệp cập nhật lần cuối), thay vì các JAR hoặc POM mà chúng đang báo cáo. Theo cách tương tự, tôi nghĩ về MyDotNetAssembly.exe.config là một loại tệp khác biệt với MyDotNetAssembly.exe.
David A. Gray

0

Mở thiết bị đầu cuối của bạn, điều hướng đến thư mục dự án Eclipse của bạn và chạy:

mvn install

Nếu mvn installkhông cập nhật phần phụ thuộc của bạn, hãy gọi nó bằng một nút chuyển để buộc cập nhật:

mvn install -U

Đây là cách tiếp cận an toàn hơn nhiều so với việc giả mạo tệp maven khi bạn xóa ".lastUpdated".


1
Tôi có cùng một vấn đề và mvn install -Uđã không giúp đỡ. mvn clean installcũng không làm được việc
roxch

0

Sử dụng lệnh này bên trong .m2 / repository dir để đổi tên tất cả các tệp:

for file in `find . -iname *.lastUpdated`; do renamed=$(echo $file | rev | cut -c13- | rev); echo renaming: $file to $renamed; mv $file $renamed; done

Điều này hữu ích để không tải lại tất cả các nguồn.

Điều này không hoạt động ... .jar bị mất. :(

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.