Maven không tìm thấy cổ vật địa phương


107

Đôi khi maven phàn nàn rằng một phần phụ thuộc cụ thể, được xây dựng và đóng gói cục bộ, không thể tìm thấy trong kho lưu trữ cục bộ khi đang xây dựng một dự án khác có phần phụ thuộc đó. Chúng tôi gặp lỗi như:

Không thể thực hiện mục tiêu trên dự án X: Không thể giải quyết các phụ thuộc cho dự án X: Không tìm thấy Y trong [kho lưu trữ] đã được lưu vào bộ nhớ cache trong kho lưu trữ cục bộ, giải pháp sẽ không được thử lại cho đến khi khoảng thời gian cập nhật của nội bộ trôi qua hoặc cập nhật bị buộc - >

Trong đó X là dự án đang được xây dựng, và Y là hiện vật được cho là đã mất tích. Nếu bạn tìm trong kho lưu trữ cục bộ, hiện vật ở đó. Tạo tác này không bao giờ được cài đặt trong kho lưu trữ archiva của chúng tôi, do đó, vấn đề hoàn toàn dựa trên kho lưu trữ cục bộ.

Chúng tôi đã thử nhiều cấu hình khác nhau trong settings.xml và tất nhiên là "mvn -U". Không tốt, cũng không nên vì hiện vật này không bao giờ đi xa hơn kho lưu trữ cục bộ.

Hai điều duy nhất có vẻ hoạt động là đợi một thời gian rất dài cho đến khi maven xuất hiện hoặc xóa hoàn toàn kho lưu trữ cục bộ. Có lẽ tùy chọn chờ có liên quan đến khoảng thời gian cập nhật nói trên.

Chúng tôi đã gặp sự cố này với maven 3.0.2 và 3.0.3. Chúng tôi đang sử dụng Archiva 1.0.3 (nhưng đây không phải là một yếu tố). Mọi sự trợ giúp sẽ rất được trân trọng.


1
Maven có đang ghi nhật ký bất cứ thứ gì trong khi hay ngay trước khi "chờ đợi?" Tức là nó đang cố gắng kết nối với một kho lưu trữ không thể truy cập? Ngoài ra, các hiện vật có vấn đề là "-SNAPSHOT"?
noahlz 20/09/12

Maven không đăng nhập bất cứ điều gì khác ngoài lỗi tôi đã đề cập ở trên. Và có, đây là một sự phụ thuộc vào ảnh chụp nhanh.
user1686620


1
Bạn đã cài đặt gói xây dựng trước khi cố gắng xây dựng dự án thứ hai chưa?
khmarbaise 21/09/12

3
Tôi thích cách thông báo lỗi là một câu chạy, không phải là một câu đúng ngữ pháp. Bằng cách này, chúng tôi không biết chắc liệu nó không thể tìm thấy Y hay Y đã được lưu vào bộ nhớ cache cục bộ hay cả hai. Dù sao, tôi cũng có một vấn đề tương tự. Tôi đã có thể giải quyết vấn đề này bằng tùy chọn -U vì phần phụ thuộc của tôi nằm trong kho lưu trữ nội bộ của công ty tôi. Tại sao các hiện vật bạn cần không được triển khai vào kho lưu trữ nội bộ của công ty bạn?
jyoungdev

Câu trả lời:


77

Kho lưu trữ Maven cục bộ theo dõi nơi tạo tác ban đầu đến từ bằng cách sử dụng tệp có tên "_maven.repositories" trong thư mục tạo tác. Sau khi loại bỏ nó, bản dựng đã hoạt động. Câu trả lời này đã khắc phục sự cố cho tôi.


26
Đối với tôi, đó là một tệp có tên "_remote.repositories". Tôi đã gỡ bỏ nó và nó hoạt động! Cảm ơn các thủ thuật!
perbellinio

2
Thx tệp có tên _remote.repositories cũng có mặt. nó đã xảy ra với tôi khi nexus của chúng ta ngừng kết nối mạng nên nó không thể lấy được các phần phụ thuộc
cabaji99 02/02

1
Giải pháp được cung cấp không hoạt động. Tuy nhiên, tôi quan tâm đến lý do tại sao vấn đề này lại xảy ra. Ai có thể cung cấp cho tôi một lời giải thích nhanh chóng? Tôi có phải làm điều gì đó khác đi không?
Janothan

Nếu bạn muốn bỏ qua kiểm tra nguồn gốc này một lần (mà không xóa các siêu tệp), hãy thử chuyển aether.enhancedLocalRepository.trackingFilename=some_dummy_file_namesang quy trình giải quyết phụ thuộc; cách dễ nhất là thêm một thuộc tính hệ thống -D vào lệnh gọi.
Janaka Bandara

@Janothan IMO liên kết trong câu trả lời cung cấp một lời giải thích khá tốt :)
Janaka Bandara

40

Vì các tùy chọn ở đây không phù hợp với tôi, tôi đang chia sẻ cách tôi giải quyết nó:

Dự án của tôi có một dự án mẹ (với pom.xml của riêng nó) có nhiều mô-đun con, một trong số đó (A) có sự phụ thuộc vào một mô-đun con khác (B). Khi tôi thử mvn packageở A, nó không hiệu quả vì B không thể được giải quyết.

Thực thi mvn install trong thư mục mẹ đã thực hiện công việc. Sau đó, tôi có thể làm mvn packagebên trong A và chỉ khi đó nó mới có thể tìm thấy B.


3
CẢM ƠN BẠN! điều này đã khiến tôi phát điên. mvn clean package jboss-as: deploy đã hoạt động khi tôi thực thi trên một dòng, nhưng không hoạt động khi tôi thực hiện chúng riêng lẻ.
PMorganCA

18

Ngay cả ở chế độ ngoại tuyến, maven sẽ kiểm tra kho lưu trữ từ xa nếu có một điểm đánh dấu _remote.repositories cho phần phụ thuộc. Nếu bạn cần hoạt động ở chế độ ngoại tuyến, bạn có thể cần xóa các tệp này.

Lệnh shell đơn giản bên dưới sẽ xóa các tệp đánh dấu này. Điều này là an toàn nếu bạn chỉ sử dụng chế độ ngoại tuyến cho máy. Tôi sẽ KHÔNG làm điều này trên một máy cần kéo tệp xuống từ web.

Tôi đã sử dụng chiến lược này trên một máy chủ xây dựng bị ngắt kết nối với web. Chúng tôi phải chuyển kho lưu trữ đến nó, xóa các tệp đánh dấu và sau đó chạy ở chế độ ngoại tuyến.

Trên Linux / Unix, bạn có thể xóa các tệp đánh dấu kho lưu trữ từ xa theo cách này:

cd ~/.m2
find . -name "_remote.repositories" -type f -delete

1
Giải pháp này phù hợp với tôi, đối với phần phụ thuộc mà tôi đã sao chép từ một máy tính khác không có sẵn trong kho lưu trữ trung tâm. Mặc dù lệnh thiếu một vài ký tự. Đây là lệnh đầy đủ: find. -name "_remote.repositories" -type -f -delete
Hans Deragon

2
Hoặc, thay vì xóa, bạn có thể "dẫn đường" cho Maven không nhìn vào _remote.repositoriestệp bằng cách chuyển -Daether.enhancedLocalRepository.trackingFilename=some_dummy_file_nametới quy trình. (Chưa thử trên một build Maven thực tế, nhưng hoạt động khi gọi Maven lập trình, vì thế cựu cũng nên làm việc)
Janaka Bandara

1
Tôi đã thực hiện việc tìm kiếm này và xóa các phụ thuộc cụ thể (các lọ) mà Maven không tìm thấy, vì chúng được liệt kê và có thể quản lý đối với (<10). Điều này là do cấu hình sai khi trỏ đến một Nexus từ xa hiện không khả dụng (như tôi hiểu ..). Vì vậy, thực tế không cần phải quét tất cả các repo để xóa. Dù sao giải pháp này đã tiết kiệm trong ngày. Nó làm việc cho tôi.
Diego1974

9

Khi điều này xảy ra với tôi, đó là vì tôi đã sao chép settings.xml của mình một cách mù quáng từ một mẫu và nó vẫn có <localRepository/>phần tử trống . Điều này có nghĩa là không có kho lưu trữ cục bộ nào được sử dụng khi giải quyết các phụ thuộc (mặc dù các tạo tác đã cài đặt của bạn vẫn được đặt ở vị trí mặc định). Khi tôi thay thế nó bằng<localRepository>${user.home}\.m2\repository</localRepository> nó nó bắt đầu hoạt động.

Đối với * nix <localRepository>${user.home}/.m2/repository</localRepository>, tôi cho là vậy.


6
Kho lưu trữ $ {user.home} \. m2 \ là mặc định, vì vậy việc xóa thẻ trống sẽ hoạt động như nhau.
Luis Muñoz

9

Maven nhớ lại khi nó không tìm thấy thứ gì đó. Điều quan trọng là "độ phân giải sẽ không được thử nghiệm lại cho đến khi khoảng thời gian cập nhật nội bộ đã trôi qua hoặc cập nhật bị buộc ->"

Giải pháp nhanh chóng là xóa thư mục con "kho lưu trữ" cục bộ của bạn cho cấu phần sự cố - giả sử bạn đã khắc phục sự cố với nó. :)

mvn -U sẽ buộc cập nhật từ kho lưu trữ từ xa - một lần nữa, giả sử bây giờ bạn đã điền từ xa với tạo tác đã nói.


2

Bắt hết. Khi các giải pháp được đề cập ở đây không hoạt động (trường hợp của tôi xảy ra), chỉ cần xóa tất cả nội dung khỏi thư mục / thư mục '.m2' và thực hiện mvn clean install.


2

Nếu bạn đã <repositories/>xác định trong pom.xml của mình thì có vẻ như kho lưu trữ cục bộ của bạn bị bỏ qua.


1

Ngay cả khi tôi đã đối mặt với vấn đề này và giải quyết nó bằng 2 cách:

1) Trong IDE của bạn, chọn dự án và làm sạch tất cả các dự án sau đó cài đặt tất cả các phần phụ thuộc của maven bằng cách nhấp chuột phải vào dự án -> chuyển đến maven và Cập nhật các phần phụ thuộc dự án chọn tất cả các dự án cùng một lúc để cài đặt giống nhau. Sau khi điều này được thực hiện, hãy chạy dự án cụ thể

2) Khác Những gì bạn có thể làm là kiểm tra trong pom.xml các phụ thuộc mà bạn đang gặp lỗi và "cài đặt sạch mvn" các dự án phụ thuộc đó trước tiên và cài đặt các phụ thuộc maven của dự án hiện tại mà bạn gặp sự cố. Bằng cách này, các phụ thuộc của dự án cục bộ sẽ được xây dựng và các lọ sẽ được tạo.


0

Tôi gặp sự cố tương tự khi dự án mới của tôi phụ thuộc vào jar oracle jdbc (mà tôi đã cài đặt trong kho lưu trữ cục bộ của mình và hoạt động tốt cho các dự án khác). Tôi đã thử tùy chọn -U, xóa tệp .lastupdate hoặc toàn bộ thư mục và downlaod một lần nữa, nhưng nó không hoạt động. cuối cùng, tôi đã xóa thư mục và cài đặt lại cục bộ, nó hoạt động.


0

Một trong những lỗi tôi tìm thấy xung quanh Maven là khi tôi đặt tệp settings.xml của mình vào sai thư mục. Nó phải nằm trong thư mục .m2 dưới dir nhà người dùng của bạn. Kiểm tra để đảm bảo rằng nó ở đúng nơi (cùng với settings-security.xml nếu bạn đang sử dụng).


0

Tôi đã có DependencyResolutionExceptiontrong Ubuntu Linux khi tôi cài đặt các tạo tác cục bộ thông qua một tập lệnh shell. Giải pháp là xóa các tạo tác cục bộ và cài đặt lại chúng một cách "thủ công" - gọi mvn install:install-filequa thiết bị đầu cuối.


0

Điều này xảy ra bởi vì tôi đã httpthay vì httpstrong điều này:

<repository>
    <id>jcenter</id>
    <name>jcenter-bintray</name>
    <url>https://jcenter.bintray.com</url>
</repository>

0

kiểm tra xem hiện vật Y của bạn có bao bì được đặt thành "jar" hay không. Nếu bạn đã xác định nó là "cuộc chiến" do lỗi hoặc sao chép dán, nó sẽ hiển thị điều kỳ lạ này "đã được lưu trữ trong kho lưu trữ cục bộ, độ phân giải sẽ không được thử lại cho đến khi khoảng thời gian cập nhật của nội bộ đã trôi qua hoặc cập nhật bị buộc". Tôi mong đợi một cái gì đó như "tạo tác Y là chiến tranh, loại bình được mong đợi".


-1

Tôi đã gặp lỗi tương tự do một nguyên nhân khác: Tôi đã tạo một POM khởi động có chứa các phụ thuộc "thực tiễn tốt" của chúng tôi và xây dựng và cài đặt cục bộ để kiểm tra nó. Tôi có thể "nhìn thấy" nó trong repo, nhưng một dự án sử dụng nó đã gặp lỗi ở trên. Những gì tôi đã làm là đặt POM khởi động thành pom, vì vậy không có JAR. Maven đã khá chính xác rằng nó không có trong Nexus - nhưng tôi không mong đợi điều đó xảy ra, vì vậy lỗi xảy ra, ummm, vô ích. Thay đổi POM khởi động sang đóng gói bình thường và cài đặt lại đã khắc phục sự cố.


Câu trả lời này có lẽ sẽ tốt hơn dưới dạng một bình luận, vì nó không phải là câu trả lời trực tiếp cho câu hỏi.
00prometheus
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.