Cài đặt Mvn hoặc gói Mvn


134

Tôi chưa quen với Maven, tôi có một dự án web dựa trên Java với maven được cấu hình trong MyEclipse của tôi.
Bây giờ nếu tôi sửa đổi bất kỳ tập tin java sau đó làm tôi cần phải làm Run as -> Mvn installhay Mvn package?

Câu trả lời:


158

từ http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

package: lấy mã được biên dịch và đóng gói theo định dạng phân phối của nó, chẳng hạn như JAR.

install: cài đặt gói vào kho lưu trữ cục bộ, để sử dụng làm phụ thuộc trong các dự án khác cục bộ

Vì vậy, câu trả lời cho câu hỏi của bạn là, nó phụ thuộc vào việc bạn có muốn cài đặt nó vào repo cục bộ của bạn hay không. Cài đặt cũng sẽ chạy gói vì nó cao hơn trong ngăn xếp pha mục tiêu.


Tôi có một dự án nơi tôi đang chuyển đổi mã thư mục chính & mã thư mục thử nghiệm thành Jar. Sau đó, tôi muốn triển khai nó vào nexus để nó có thể được sử dụng bởi các dự án khác. Lệnh triển khai của tôi là "mvn triển khai sạch -DskipTests". Tôi có thể thực hiện gói lệnh này, thay vì cài đặt vào repo cục bộ không?
MasterJoe2

@ MasterJoe2 "Sau đó, tôi muốn triển khai nó vào nexus" Đó là những gì deploy. Nếu bạn thay thế nó package, nó sẽ không được triển khai cho Nexus.
walen

37

mvn installlà tùy chọn thường được sử dụng nhất.
mvn packagehiếm khi được sử dụng, chỉ khi bạn gỡ lỗi một số vấn đề với quy trình xây dựng maven.

Xem: http://maven.apache.org/guides/int sinhtion / inttiontion-to-the-lifecycle.html

Lưu ý rằng mvn packagesẽ chỉ tạo một tệp jar.
mvn installsẽ làm điều đó cài đặt các tệp jar (và lớp, v.v.) ở những vị trí thích hợp nếu mã khác phụ thuộc vào các tệp đó.

Tôi thường làm một mvn clean install; điều này xóa targetthư mục và tạo lại tất cả các lọ trong vị trí đó.
Việc dọn dẹp giúp với những thứ không cần thiết hoặc bị loại bỏ đôi khi có thể cản trở.
Thay vào đó sau đó gỡ lỗi (một số thời gian) chỉ cần bắt đầu mới mọi lúc.


27
Tôi không đồng ý rằng gói đó hiếm khi được sử dụng trên 2 điểm. 1) Nó được chạy mỗi khi bạn chạy cài đặt. 2) Nếu bạn đang tạo một .war thì chỉ cần chạy gói là ổn vì bạn không cần phải có chiến tranh trong repo địa phương.
Joshua Wilson

5
Câu trả lời không giải thích, tại sao bạn muốn cài đặt vào kho lưu trữ cục bộ. Theo hiểu biết của tôi, nếu các dự án được thiết lập đúng, thì lò phản ứng sẽ cung cấp các phụ thuộc giữa các mô-đun. Nếu các dự án không được thiết lập đúng, thì việc cài đặt chỉ có thể che giấu sự thật này và sử dụng các tạo phẩm sai. Nếu bạn có các dự án phụ thuộc, điều đó phải được xây dựng riêng vì một số lý do, chỉ sau đó bạn mới muốn cài đặt.
Vsevolod Golovanov

11

Từ tham chiếu Vòng đời , cài đặt sẽ chạy thử nghiệm tích hợp của dự án, gói sẽ không.

Nếu bạn thực sự cần không cài đặt các tạo phẩm được tạo, hãy sử dụng ít nhất là xác minh .


5

Ngoài ra, bạn cần lưu ý rằng nếu dự án của bạn bao gồm một số mô-đun phụ thuộc lẫn nhau, bạn nên sử dụng "cài đặt" thay vì "gói", nếu không, bản dựng của bạn sẽ thất bại, vì khi bạn sử dụng lệnh cài đặt, mô-đun A sẽ được đóng gói và được triển khai vào kho lưu trữ cục bộ và sau đó nếu mô-đun B cần mô-đun A làm phụ thuộc, nó có thể truy cập nó từ kho lưu trữ cục bộ.


4

Nếu bạn không sử dụng kho lưu trữ từ xa (như artifactory), hãy sử dụng đơn giản cũ: mvn clean install

Chủ đề khá cũ nhưng AFAIK, nếu bạn chạy kho lưu trữ của riêng bạn (ví dụ: với artifactory) để chia sẻ jar giữa các nhóm của bạn, bạn có thể muốn sử dụng

mvn clean deploy

thay thế.

Bằng cách này, máy chủ tích hợp liên tục của bạn có thể chắc chắn rằng tất cả các phụ thuộc được đẩy chính xác vào kho lưu trữ từ xa của bạn. Nếu bạn bỏ lỡ một cái, mvn sẽ không thể tìm thấy nó vào kho lưu trữ m2 cục bộ CI của bạn.


1
Tôi nghĩ bạn đang nói về mvn triển khai sạch chứ không phải gói mvn sạch
Mayjak

2

gói - lấy mã được biên dịch và đóng gói theo định dạng phân phối của nó, chẳng hạn như tệp JAR hoặc WAR. cài đặt - cài đặt gói vào kho lưu trữ cục bộ, để sử dụng như một phụ thuộc trong các dự án khác cục bộ


2

Cách thích hợpmvn packagenếu bạn đã làm mọi thứ một cách chính xác cho phần cốt lõi của bản dựng thì không cần phải cài đặt các gói của bạn trong kho lưu trữ cục bộ.

Ngoài ra, nếu bạn sử dụng Travis, bạn có thể "lưu trữ" các phụ thuộc của mình vì nó sẽ không chạm vào bạn $HOME.m2/repositorynếu bạn sử dụng gói cho dự án của riêng bạn.

Trong thực tế nếu bạn thậm chí cố gắng làm một mvn sitebạn thường cần phải làm một mvn installtrước. Có quá nhiều lỗi với một sitehoặc nhiều plugin được bảo trì kém.


0

Nó phụ thuộc vào những gì bạn đang cố gắng đạt được sau khi thay đổi tệp Java. Cho đến khi bạn muốn kiểm tra quá trình maven, bạn không bao giờ cần phải làm gì cả. Eclipse / MyEclipse sẽ xây dựng những gì cần thiết và đặt đầu ra ở vị trí thích hợp trong dự án của bạn. Bạn cũng có thể chạy hoặc triển khai nó (ví dụ, nếu đó là một dự án web), mà bạn không cần phải làm bất cứ điều gì rõ ràng với maven. Cuối cùng, để cài đặt dự án của bạn trong kho lưu trữ maven, bạn sẽ cần thực hiện cài đặt maven. Bạn cũng có thể có các mục tiêu maven khác mà bạn muốn thực hiện, mà MyEclipse sẽ không tự động thực hiện.

Như tôi nói, nó phụ thuộc vào những gì bạn muốn làm.

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.