Maven: วิธีเรียกใช้ไฟล์. java จากบรรทัดคำสั่งผ่านอาร์กิวเมนต์


88

ฉันมีปัญหาดังต่อไปนี้ ฉันต้องการเรียกใช้mvnจากบรรทัดคำสั่งสำหรับMain.javaไฟล์ Main.javaยอมรับพารามิเตอร์ ฉันจะทำสิ่งนั้นจากบรรทัดคำสั่งได้อย่างไร

ฉันพยายามหาตัวอย่าง แต่ไม่ประสบความสำเร็จ มีใครช่วยยกตัวอย่างให้ฉันหน่อยได้ไหม

ฉันดูที่นี่แต่ไม่ค่อยเข้าใจว่าควรทำอย่างไร

นอกจากนี้ฉันจะรันคำสั่งนั้นจากโฟลเดอร์อื่นที่ไม่ใช่โฟลเดอร์ Main.java ได้อย่างไร

ตัวอย่างเช่นMain.javaตั้งอยู่ในmy/java/program/Main.java. ควรใส่อะไร

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

4
คุณไม่เข้าใจอะไรจากบทแนะนำที่เชื่อมโยงกันแน่ ตรงไปตรงมาสวย โปรดเพิ่มคำถามของคุณรหัสที่คุณได้ลองใช้จนถึงตอนนี้
Perception

โดยทั่วไปสิ่งที่ฉันพยายามทำคือการเรียกคลาส java จากคลาส java อื่น ปกติฉันเรียกใช้คลาสนั้นจาก Eclipse ฉันใช้ Runtime.getRuntime (). exec (""); เพื่อเรียกใช้คลาสนั้นจากโปรแกรม java อื่น แต่ Main.class ต้องการ mvn เพื่อรัน (ฉันแก้ไขคำถาม)
phedon rousou

คำตอบ:


152

คุณสามารถเรียกใช้: mvn exec:exec -Dexec.args="arg1".

สิ่งนี้จะส่งผ่านอาร์กิวเมนต์arg1ไปยังโปรแกรมของคุณ

คุณควรระบุคลาสหลักที่มีคุณสมบัติครบถ้วนตัวอย่างเช่น Main.java ที่อยู่ในการทดสอบแพ็กเกจจะต้อง

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

เมื่อใช้-fพารามิเตอร์ตามที่อธิบายไว้ที่นี่คุณสามารถเรียกใช้จากไดเร็กทอรีอื่นได้

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

สำหรับหลายอาร์กิวเมนต์ให้คั่นด้วยช่องว่างตามที่คุณต้องการในบรรทัดคำสั่ง

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

สำหรับอาร์กิวเมนต์ที่คั่นด้วย a spaceคุณสามารถจัดกลุ่มโดยใช้'argument separated with space' ภายในเครื่องหมายคำพูด

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

1
ใช่ แต่จะรู้ได้อย่างไรว่าไฟล์ main.java อยู่ที่ไหน
phedon rousou

จะเกิดอะไรขึ้นถ้าฉันไม่มี pom.xml ฉันได้รับข้อผิดพลาดต่อไปนี้ไม่สามารถเรียกใช้งาน mojo: java ต้องใช้โปรเจ็กต์ที่มี pom.xml อยู่แล้ว แต่บิลด์ไม่ได้ใช้งาน
phedon rousou

โครงการ maven ต้องใช้ pom.xml โดยไม่มีไฟล์นี้การใช้ maven ก็สมเหตุสมผลดี ดังนั้นคุณอาจต้องการสร้างโครงการ maven ก่อนหรือไม่? จากนั้นวิธีแก้ปัญหาอื่น ๆ ทั้งหมดควรทำงานได้ดี
Behe

เนื่องจากฉันใช้ Eclipse กับปลั๊กอิน maven ฉันคิดว่ามันถูกสร้างขึ้นโดยอัตโนมัติ แต่เห็นได้ชัดว่าฉันคิดผิด ฉันจะตรวจสอบมัน
phedon rousou

จะส่งอาร์กิวเมนต์ที่มีช่องว่างได้อย่างไร?
Vanuan

6

นอกจากใช้งานได้mvn exec:javaแล้วคุณยังสามารถใช้งานได้ด้วยmvn exec:exec

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

ฉันจะใส่อาร์กิวเมนต์ Xmx ไว้ที่ใดในกรณีนี้
Fabich

1
ลองใส่ลงใน-Dexec.args:mvn exec:exec -Dexec.executable="java" -Dexec.args="-Xmx4g -classpath %classpath your.package.MainClass"
Benedikt Köppel

ฉันไม่เห็นว่าสิ่งนี้จะดีไปกว่าแนวทางตรงไปตรงมาของ (IMO) ของ exec: java
Neowizard

6

การเพิ่มเชลล์สคริปต์เช่นrun.shทำให้ง่ายขึ้นมาก:

#!/usr/bin/env bash
export JAVA_PROGRAM_ARGS=`echo "$@"`
mvn exec:java -Dexec.mainClass="test.Main" -Dexec.args="$JAVA_PROGRAM_ARGS"

จากนั้นคุณสามารถดำเนินการ:

./run.sh arg1 arg2 arg3

ใช้งานได้ดีมาก! คุณสามารถอธิบายได้หรือไม่ว่าทำไมสิ่งนี้ไม่: -Dexec.args = "$ @"
baumato

1
$@เก็บอาร์กิวเมนต์ทั้งหมดไว้ในรายการสตริงที่มีเครื่องหมายคำพูด หากคุณต้องการใช้โดยตรงคุณสามารถใช้$*- อาร์กิวเมนต์ทั้งหมดเป็นสตริงเดียว ลองทำดูไหม
Tommy1005
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.