2012-04-11 50 views
68

Tôi gặp sự cố sau. Tôi muốn chạy mvn từ dòng lệnh cho tệp Main.java. Main.java chấp nhận tham số. Làm cách nào để thực hiện điều đó từ dòng lệnh?Maven: Cách chạy tệp .java từ đối số truyền dòng lệnh

Tôi đã thử tìm một ví dụ nhưng tôi đã không thành công. Ai đó có thể giúp tôi bằng cách cho tôi một ví dụ về điều đó?

Tôi đã xem here nhưng không hoàn toàn hiểu những gì tôi nên làm.

Ngoài ra, làm cách nào để thực hiện lệnh đó từ một thư mục khác với thư mục Main.java?

ví dụ: Main.java nằm ở my/java/program/Main.java. Tôi nên đặt gì trong

mvn exec:java -Dexec.mainClass="what to put here?" -Dexec.args="arg0 arg1 arg2" 
+4

gì Chính xác thì bạn không hiểu từ các hướng dẫn liên quan? Nó khá thẳng về phía trước. Vui lòng thêm vào câu hỏi của bạn, mã bạn đã thử cho đến thời điểm này. – Perception

+0

Về cơ bản những gì tôi đang cố gắng làm là gọi một lớp java từ một lớp java khác. Thông thường tôi chạy lớp đó từ Eclipse. Tôi đang sử dụng Runtime.getRuntime(). Exec (""); để thực hiện lớp đó từ một chương trình java khác. Nhưng Main.class cần mvn để chạy. (Tôi đã chỉnh sửa câu hỏi) –

Trả lời

109

Bạn có thể chạy: mvn exec:exec -Dexec.args="arg1".

Điều này sẽ vượt qua đối số arg1 cho chương trình của bạn.

Bạn nên xác định các lớp học chính đầy đủ, ví dụ, một Main.java đó là trong một thử nghiệm gói sẽ cần

mvn exec:java -Dexec.mainClass=test.Main 

Bằng cách sử dụng các tham số -f, như mô tả here, bạn cũng có thể chạy nó từ các thư mục khác.

mvn exec:java -Dexec.mainClass=test.Main -f folder/pom.xm 

Đối với nhiều đối số, chỉ cần tách chúng bằng dấu cách như bạn làm ở dòng lệnh.

mvn exec:java -Dexec.mainClass=test.Main -Dexec.args="arg1 arg2 arg3" 

Đối với lập luận tách ra với một không gian , bạn có thể sử dụng nhóm 'argument separated with space' bên trong dấu ngoặc kép.

mvn exec:java -Dexec.mainClass=test.Main -Dexec.args="'argument separated with space' 'another one'" 
+0

có, nhưng làm thế nào để biết vị trí của tập tin main.java? –

+0

Tôi đã thêm một số thông tin vào câu trả lời đầu tiên của mình. – Behe

+0

nếu tôi không có tệp pom.xml. Tôi nhận được lỗi sau Không thể thực thi mojo: java. Nó yêu cầu một dự án với một tệp pom.xml hiện có, nhưng bản dựng không sử dụng một tệp. –

0

Hãy xem maven-exec-plugin. Được sử dụng đúng cách, bạn có thể làm cho nó biên dịch lớp java của bạn và sau đó chỉ cần thực thi java với lớp được biên dịch trên classpath. Để khởi chạy, tất cả những gì bạn phải làm là sử dụng

mvn exec:exec 
+0

Khi tôi gặp khó khăn khi xem chi tiết làm cho một cái gì đó hoạt động, được bảo là "đơn giản" làm một số điều cấp cao không giúp được gì. Lệnh khởi chạy bạn cung cấp là một bước, nhưng một cấu hình ví dụ cho exec: exec sẽ hoàn chỉnh hơn. – Chris

+0

@Chris nếu bạn theo liên kết được cung cấp, có rất nhiều ví dụ (được duy trì và mọi thứ) sẽ chính xác hơn và đầy đủ hơn các câu trả lời của tôi. Vì vậy, đây là lý do tại sao tôi không đăng một ví dụ. Tôi mời bạn tham khảo trang của maven-exec-plugin mà bạn sẽ tìm thấy mọi thứ bạn đang tìm kiếm. –

3

Ngoài ra để chạy nó với mvn exec:java, bạn cũng có thể chạy nó với mvn exec:exec

mvn exec:exec -Dexec.executable="java" -Dexec.args="-classpath %classpath your.package.MainClass" 
+0

Tôi sẽ đặt đối số Xmx trong trường hợp này ở đâu? – Fabich

+1

Thử đặt nó vào '-Dexec.args':' mvn exec: exec -Dexec.executable = "java" -Dexec.args = "- Xmx4g -classpath% classpath your.package.MainClass" ' –

+0

Tôi không thấy ở đâu sẽ tốt hơn phương pháp tiếp cận thẳng (IMO) của exec: java – Neowizard

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