Thêm một phụ thuộc trong Maven


134

Làm cách nào để tôi lấy một tệp jar mà tôi có và thêm nó vào hệ thống phụ thuộc trong maven 2? Tôi sẽ là người duy trì sự phụ thuộc này và mã của tôi cần jar này trong đường dẫn lớp để nó sẽ biên dịch.

Câu trả lời:


139

Bạn sẽ phải làm điều này theo hai bước:

1. Cung cấp cho JAR của bạn một nhómId, artifactId và phiên bản và thêm nó vào kho lưu trữ của bạn.

Nếu bạn không có kho lưu trữ nội bộ và bạn chỉ đang cố gắng thêm JAR vào kho lưu trữ cục bộ của mình, bạn có thể cài đặt nó như sau, sử dụng bất kỳ nhóm tùy ýId / artifactIds nào:

mvn install:install-file -DgroupId=com.stackoverflow... -DartifactId=yourartifactid... -Dversion=1.0 -Dpackaging=jar -Dfile=/path/to/jarfile

Bạn cũng có thể triển khai nó vào kho lưu trữ nội bộ của mình nếu có, và muốn cung cấp nó cho các nhà phát triển khác trong tổ chức của bạn. Tôi chỉ sử dụng giao diện dựa trên web của kho lưu trữ của mình để thêm các tạo phẩm, nhưng bạn sẽ có thể thực hiện điều tương tự bằng cách sử dụng mvn deploy:deploy-file ....

2. Cập nhật các dự án phụ thuộc để tham khảo JAR này.

Sau đó cập nhật sự phụ thuộc trong tệp pom.xml của các dự án sử dụng JAR bằng cách thêm phần sau vào phần tử:

<dependencies>
    ...
    <dependency>
        <groupId>com.stackoverflow...</groupId>
        <artifactId>artifactId...</artifactId>
        <version>1.0</version>
    </dependency>
    ...
</dependencies>

3
Bạn có thể thêm chi tiết về việc triển khai? Chúng tôi có một kho lưu trữ nội bộ và tôi muốn triển khai tệp cài đặt jar cục bộ của mình vào kho lưu trữ đó để các nhà phát triển khác và máy chủ xây dựng của chúng tôi cũng sẽ nhận được tệp jar.
Kieveli

Câu trả lời này sẽ nhận được tất cả các lượt thích! Tôi đã sử dụng điều này để thêm thành công phụ thuộc cho các dự án maven của mình trên cả Google App Engine và Heroku.
Leo C Han

93

Bạn cũng có thể chỉ định một phụ thuộc không có trong kho lưu trữ maven. Có thể hữu ích khi không có kho lưu trữ maven trung tâm cho nhóm của bạn tồn tại hoặc nếu bạn có máy chủ CI

    <dependency>
        <groupId>com.stackoverflow</groupId>
        <artifactId>commons-utils</artifactId>
        <version>1.3</version>
        <scope>system</scope>
        <systemPath>${basedir}/lib/commons-utils.jar</systemPath>
    </dependency>

4
Tôi có thể phụ thuộc vào tệp pom khác thay vì jar không?
Jayen

45

Trên thực tế, về việc điều tra điều này, tôi nghĩ tất cả những câu trả lời này là không chính xác. Câu hỏi của bạn là sai lệch vì mức độ hiểu biết của chúng tôi maven. Và tôi nói bởi vì tôi vừa được giới thiệu maven.

Trong Eclipse, khi bạn muốn thêm một tệp jar vào dự án của mình, thông thường bạn tải xuống tệp jar theo cách thủ công và sau đó thả nó vào thư mục lib . Với maven, bạn không làm theo cách này. Đây là những gì bạn làm:

  • Tới mvnrepository
  • Tìm kiếm thư viện bạn muốn thêm
  • Sao chép dependencycâu lệnh vàopom.xml
  • xây dựng lại thông qua mvn

Bây giờ, mavensẽ kết nối và tải xuống jarcùng với danh sách các phụ thuộc và tự động giải quyết mọi phụ thuộc bổ sung jarcó thể có. Vì vậy, nếu jarcũng cần đăng nhập chung, nó cũng sẽ được tải xuống.


5
Tôi đang sử dụng Spring Tool Suite (được xây dựng trên Eclipse). Sau các bước 1 & 2 trong giải pháp trên: 1. Mở pom.xml trong trình soạn thảo STS, nhấp vào tab "Phụ thuộc" ở dưới cùng 2. Nhấp vào "Thêm" trong nhóm Phụ thuộc 3. Sao chép / dán thông tin phụ thuộc tab "Maven" từ cửa sổ trình duyệt ( groupId, artifactId, phiên bản) vào các trường tương ứng trong cửa sổ bật lên "Chọn phụ thuộc" trong STS 4. Nhấp OK 5. Lưu pom.xml Sau khi lưu, thư mục maven của tôi trên ổ cứng và cài đặt phụ thuộc maven trong STS được cập nhật trong vài giây. Bạn có thể chỉnh sửa trực tiếp .xml, nhưng sử dụng công cụ này có thể giúp tránh các vấn đề về định dạng xml.
Chris R

2
Đây thực sự là cách ưa thích để làm mọi thứ, nhưng có những tình huống bạn không thể làm điều đó (ví dụ: jar độc quyền không có trên mvnreposeective). Trong trường hợp đó, bạn sẽ cần một cách để thêm "thủ công", trong trường hợp đó, một câu trả lời khác sẽ có giải pháp.
Thunderforge

Cũng có thể câu hỏi được hỏi ít hơn câu hỏi dành cho người mới bắt đầu. Tôi đặt nó cho những người muốn làm một cái gì đó mà không có cụm từ thích hợp xuất phát từ thời gian làm việc với maven. (Như tôi lúc đó)
Kieveli

KISS Cảm ơn bạn, tôi đã đọc rằng đây là tương đương với C # Nuget trong Java nhưng tôi đã cố gắng tìm ra nút nào để nhấp hoặc cmd để chạy. Không chính xác 1: 1 nhưng thực hiện công việc.
Terrance

Làm thế nào để xây dựng lại dự án trong maven trong intelleJ?
Irfan Nasim

14

Tôi sẽ làm điều này:

  1. thêm phụ thuộc như bạn muốn trong pom của bạn:

    <dependency>
            <groupId>com.stackoverflow...</groupId>
            <artifactId>artifactId...</artifactId>
            <version>1.0</version>
    </dependency>

  2. chạy mvn installnó sẽ cố tải xuống jar và thất bại. Trong quá trình này, nó sẽ cung cấp cho bạn toàn bộ lệnh cài đặt jar với thông báo lỗi. Sao chép lệnh đó và chạy nó! dễ dàng hả?!


3

Tôi sẽ cho rằng bạn đang hỏi làm thế nào để đẩy một phụ thuộc ra một "kho lưu trữ nổi tiếng" và không chỉ đơn giản là hỏi cách cập nhật POM của bạn.

Nếu có, thì đây là những gì bạn muốn đọc.

Và đối với bất kỳ ai đang tìm cách thiết lập một máy chủ kho lưu trữ nội bộ, hãy xem tại đây (một nửa vấn đề với việc sử dụng Maven 2 là tìm tài liệu)


Tôi muốn duy trì một sự phụ thuộc bản thân mình. Đây là một thư viện trong nhà.
Milhous
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.