2012-04-05 28 views
9

Tôi mới làm quen với Maven và đang gặp khó khăn trong việc thêm phụ thuộc. Tôi đang cố gắng để chuyển đổi một dự án hiện có để Maven, và sau khi thêm sự phụ thuộc đối với tất cả các lọ trong các thư viện tham chiếu của tôi, tôi nhận được một thông báo lỗi về hiện vật mất tích:Tìm các đồ tạo tác Maven bị thiếu

Missing artifact stax:stax:jar:1.0  
Missing artifact clover:clover:jar:1.3-rc4 
Missing artifact log4j:log4j:bundle:1.2.16 
Missing artifact stax:stax-ri:jar:1.0 

Từ đọc bài viết này: How to handle Maven missing artifact errors? , có vẻ như tôi cần tải xuống các lọ này theo cách thủ công và thêm chúng vào kho lưu trữ maven cục bộ của tôi. Câu hỏi của tôi là làm thế nào để tôi tìm thấy những lọ? Tôi đã cố gắng googling họ, và tôi có thể tìm thấy những cái lọ có tên tương tự, nhưng không chính xác như thế này, vì vậy tôi không chắc chắn nếu họ là những lọ bên phải.

Bất kỳ mẹo nào để giải quyết vấn đề này? Bình log4j là cái duy nhất được liệt kê trong thư viện tham chiếu của dự án ban đầu của tôi, vì vậy tôi đoán những cái khác được yêu cầu bởi các lọ khác mà tôi có, và tôi không biết tìm chúng ở đâu hoặc tên chính xác của chúng nên là.

Cảm ơn!

+0

Nếu bạn sử dụng maven và phải tải xuống các tạo phẩm theo cách thủ công, bạn đang làm điều gì đó nghiêm trọng sai. Đăng pom.xml của bạn hoặc các phần liên quan của nó. – j13r

+0

Đó cũng là những gì tôi đang nghĩ ... POM do plugin m2e Eclipse tạo ra có một số vấn đề, xem câu trả lời của tôi bên dưới để biết mô tả các vấn đề. – matthewb

Trả lời

21

Nhờ mọi người đã trả lời. Nguyên nhân thực sự của vấn đề là đối với mỗi trong số 3 thành phần bị thiếu đó, vì một số lý do, khi Maven tải chúng về kho lưu trữ cục bộ của tôi, .lastUpdated được gắn vào cuối của jar. Ví dụ: stax-1.0.jar.lastUpdated. Đây là lý do Maven không thể tìm thấy stax-1.0.jar. Vì vậy, để khắc phục vấn đề này, tôi phải tải xuống bằng tay stax-1.0.jar, sau đó cài đặt nó vào kho lưu trữ maven cục bộ ở cùng vị trí chính xác như tập tin bị rối, để Maven có thể tìm thấy nó. (Ví dụ, bằng cách sử dụng lệnh:

mvn install:install-file -Dfile=<path-to-file>/stax-1.0.jar   
-DgroupId=stax -DartifactId=stax -Dversion=1.0 -Dpackaging=jar 

Sử dụng chính xác cùng groupId và artifactId như hiện có, tập tin không chính xác là rất quan trọng để cho maven để tìm thấy nó

+1

cảm ơn bạn đã chia sẻ giải pháp của mình. Tôi sẽ thêm nó vào kho não bộ địa phương của tôi khi nó xảy ra với tôi. lol. Ngoài ra, có tùy chọn xóa các thư mục kho lưu trữ và có maven thử và lấy lại các tập tin. Điều này đã làm việc cho tôi trong quá khứ! –

+0

@MikeMcMahon bạn đang nói rằng không an toàn sẽ là tìm thư mục repo '.m2' và xóa nó, thành loại * force * Maven để tìm lại/tải lại libs? – mmcrae

+0

@mmcrae yes - nó thường nằm trong 'C: \ users \ \ .m2 \ repository' hoặc' tài liệu và cài đặt' cho hệ thống dựa trên windows cũ hơn (nix phải là '/ home//.m2 /'). Từ đó có thể xóa thư mục kho lưu trữ và cho phép Maven tải xuống lại tất cả các phụ thuộc của bạn từ repo maven lớn hơn. Trong lịch sử, nhưng chắc chắn không quá phổ biến, phụ thuộc có thể nhận được hơi say lên hoặc bị hỏng. Điều này sẽ cho phép maven tải lại và xây dựng lại kho lưu trữ. –

1

Có nhiều khả năng định nghĩa POM của bạn không chính xác cho log4j. Tất cả mọi thứ liên quan đến log4j nên có sẵn trong maven.

Ngoài ra, nếu bạn biết tên của nhóm (như log4j), bạn hầu như luôn luôn có thể thực hiện tìm kiếm google nhanh chóng "[bó name] maven pom" trong vòng vài hit đầu tiên bạn có sẽ nhận được maven repo chứa đoạn trích nhanh về cách đưa nó vào hoặc trang web thực sự cho jar được đóng gói và hướng dẫn của maven.

Ví dụ log4j:

<dependencies> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.16</version> 
    </dependency> 
</dependencies> 

Đôi khi dù bạn chỉ cần xác định các kho lưu trữ để tìm các mục trong (nếu nó không được lưu trữ trong các kho maven hơn)

Bạn có thể chỉ định một kho lưu trữ mới như vậy

<repositories> 
    <repository> 
     <id>Java.Net</id> 
     <url>http://download.java.net/maven/2/</url> 
    </repository> 
</repositories> 

Cuối cùng, khi bạn hoàn toàn không thể tìm thấy hiện vật đã maven'd u p cho bạn (điều này thường là đúng đối với lọ độc quyền và hoặc trình điều khiển mà bạn không thể bao gồm với dự án của bạn), bạn có thể có người dùng tự cài đặt mục thông qua dòng lệnh

mvn cài đặt: cài đặt file -DgroupId = [ group-id] -DartifactId = [artifact-id] -Dversion = [phiên bản] -Dfile =/path/to/the/file -Dpackaging = [type]

Sau đó bạn có thể tham chiếu nó trong tệp maven của bạn sử dụng thông tin được mô tả ở trên

Ví dụ Tôi có tham chiếu tùy chỉnh cho một salesforce.com pr oject

mvn install: install-file -DgroupId = com.salesforce -DartifactId = wsc -Dversion = 22 -Dfile = \ tsclient \ H \ development \ java \ wsc-22.jar -Dpackaging = jar

Để truy cập vào nó trong maven:

<dependency> 
    <groupId>com.salesforce</groupId> 
    <artifactId>wsc</artifactId> 
    <version>22</version> 
</dependency> 

Cuối cùng, bạn có thể tìm thấy các lọ (hoặc thông tin maven của họ) tại trang web tương ứng của họ (xin lưu ý tôi chỉ căn cứ những liên kết tắt tên jar, này có thể không phải là trang web thực tế, sans cũng log4j mà tôi biết là đúng)

Stax

Clover

Log4j

+0

Có, POM của tôi (được tạo tự động bởi trình cắm thêm m2e của Eclipse) không chính xác cho Log4j (và các tạo tác có vấn đề khác, xem câu trả lời được đăng bên dưới). Đối với Log4j, dưới thuộc tính "type", nó nói "bundle". Khi tôi xóa nó, nó hoạt động. – matthewb

1

Sử dụng maven search hoặc mvnrepository.com. Nếu bạn không thể tìm thấy sử dụng google tìm kiếm jar trong kho công cộng khác, ví dụ cho Stax:

maven stax-ri pom

kết quả đầu tiên của tôi là:

http://maven.nuxeo.org/nexus/content/groups/public/stax/stax-ri/1.0/

kho công cộng khác:

http://download.java.net/maven/2

http://download.java.net/maven/1

http://repository.codehaus.org

http://repository.jboss.org/nexus/content/groups/public-jboss

http://maven.springframework.org/release

2

Bạn có thể tìm thấy trang web tìm kiếm phụ thuộc dưới maven.apache.org. Đi đến phía bên trái Navigation Menü nhập FAQ (chính thức) và Thun đến cuối trang.

+1

hoặc trực tiếp qua http://maven.apache.org/general.html#How_to_find_dependencies –

0

Vấn đề của bạn có thể là một cái gì đó để làm với. MNG-4142. lỗi này có nghĩa là maven sẽ không tải một snapshot mới nếu localCopy được thiết lập để true trong artifact maven-metadata-local.xml.

Lưu ý rằng tiêu đề của lỗi này là hơi gây hiểu lầm vì vậy nó được công việc đọc các ý kiến.

Bạn có thể nghĩ rằng sử dụng cờ -U với maven sẽ khắc phục sự cố này nhưng dường như đây không phải là trường hợp.

Cách giải quyết hiện tại dường như đang tìm kiếm tất cả các phiên bản maven-metadata-local.xml và thay đổi giá trị localCopy thành false.

0

Tôi đã giải quyết sự cố này bằng cách thay đổi phiên bản log4j từ 1.2.15 đến 1.2.16.

0

Nó cũng có thể do dom4j gây ra. Cùng một lỗi xảy ra khi tôi sử dụng các cài đặt sau.

<dependency> 
    <groupId>dom4j</groupId> 
    <artifactId>dom4j</artifactId> 
    <version>20040902.021138</version> 
</dependency> 

Sau khi thay đổi thành lỗi sau, lỗi biến mất.

<dependency> 
    <groupId>dom4j</groupId> 
    <artifactId>dom4j</artifactId> 
    <version>1.6.1</version> 
</dependency> 
1

bạn có thể cố gắng thêm kho mới để pom.xml

<repositories> 
    <repository> 
    <id>java.net</id> 
    <url>http://download.java.net/maven/2/</url> 
    </repository> 
     <repository> 
     <id>jboss</id> 
     <url>http://repository.jboss.com/maven2</url> 
</repository> 
</repositories> 
1

của bạn Sau vài ngày lỗi ngu ngốc này nghe trộm tôi, tôi tìm thấy những điều sau article

Tác giả mô tả rằng có một kho lưu trữ không gian làm việc, có thể đã lỗi thời. Trong trường hợp của tôi, nó chỉ giúp nhập lại các plugin chính xác. Kho lưu trữ vùng làm việc đã được cập nhật và mọi thứ đều ổn.

Các vấn đề liên quan