2012-10-05 44 views
8

Tôi đang cố gắng để có được một dự án quản lý maven chạy trên dòng lệnh.Làm thế nào để chạy maven tạo jar trên CLI

Tôi có một bộ phụ thuộc trong tệp pom.xml sau đó được tải xuống và cài đặt trong ~/.m2/repository /. Tôi đã bao gồm các cấu hình cần thiết trong pom của tôi để thêm classpath vào manifest jar.

Bây giờ vấn đề là tôi đang cố gắng chạy jar như vậy: java -jar project-SNAPSHOT.jar.

Java không thể tìm phụ thuộc đã tải xuống (tôi giả định vì chúng được liệt kê không có đường dẫn trong tệp kê khai?), Nhưng tôi không chắc cách tốt nhất để chạy ứng dụng này.

Trả lời

5

Tùy chọn 1:
Bình tạo ra không có tệp jar phụ thuộc. Vì vậy, bạn cần phải nói cho java đẳng cấp con đường nơi mà tất cả các lọ phụ thuộc là

java -cp /lcoation/of/dependency1.jar:/location/of/dependency2.jar:/location/of/dependency3.jar -jar project-SNAPSHOT.jar 

Phương án 2:
Các giải pháp dễ dàng và tốt hơn nhiều là sử dụng AppAssembler plugin. Những gì nó làm nó gói jar của bạn trong một cấu trúc thư mục có chứa

  1. lọ phụ thuộc
  2. jar tạo
  3. vỏ/cửa sổ kịch bản để thực hiện nó

có một cái nhìn ở đây http://www.mojohaus.org/appassembler/appassembler-maven-plugin/

Tùy chọn 3:
Nếu bạn không muốn tất cả hành lý và chỉ muốn có một jar-with-dependency Bạn có thể tham khảo tại đây How can I create an executable JAR with dependencies using Maven?

Điều này sẽ chứa tất cả các lọ phụ thuộc bên trong nó.


Sửa 1: Đối với Phương án 1, Brad M nói rằng bạn có thể nhận được một danh sách tất cả DEPS của dự án của bạn bằng cách sử dụng dependency plugin. dependency:build-classpath

+0

bạn có thể giữ lại. – Nishant

+0

Tuyệt vời - đó chính xác là những gì tôi cần. Có bất kỳ cảnh báo nào với việc đóng gói mọi thứ như thế này hay không. Sử dụng bộ nhớ vv? – Nick

+0

Không có gì. Các chất liệu rất đơn giản của nó, giống như 1. tạo jar, 2. sao chép người phụ thuộc vào một thư mục repo, 3. viết một kịch bản lệnh shell trông giống như thế này 'java -jar ../myapp.jar Mainclass -cp ../repo/ * .jar' – Nishant

4
mvn exec:java -Dexec.mainClass="com.vineetmanohar.module.Main" -Dexec.classpathScope=runtime 

Bạn có thể tìm thêm ví dụ tại đây: 3 ways to run Java main from Maven.

+0

Không hoạt động đối với tôi với maven 3.0.4 '[ERROR] Giai đoạn vòng đời không xác định" .mainClass = my.Main "' –

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