Maven Run Project


231

มีเฟส "Maven" หรือ "เป้าหมาย" ในการดำเนินการวิธีการหลักของคลาส Java หรือไม่? ฉันมีโครงการที่ฉันต้องการทดสอบด้วยตนเองโดยทำสิ่งต่างๆเช่น "mvn run"

คำตอบ:


348

ดูexec Maven ปลั๊กอิน คุณสามารถรันคลาส Java โดยใช้:

mvn exec:java -Dexec.mainClass="com.example.Main" [-Dexec.args="argument1"] ...

การเรียกใช้สามารถทำได้ง่ายเหมือนmvn exec:javaการกำหนดค่าปลั๊กอินใน pom.xml ของคุณ ไซต์ปลั๊กอินบน Mojohaus มีตัวอย่างที่ละเอียดกว่า

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>com.example.Main</mainClass>
                    <arguments>
                        <argument>argument1</argument>
                    </arguments>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

14
นี่คือลักษณะของคำตอบที่ควรจะเป็น! การอ้างอิง + ตัวอย่างง่ายๆ + ตัวอย่างที่ซับซ้อน ตัวอย่างง่ายๆทำกลอุบายให้ฉัน (ไม่จำเป็นต้องปรับแต่งเพิ่มเติม)
เขียนโปรแกรม

1
มีปลั๊กอินรุ่นใหม่กว่านี้ (ใหม่กว่า 1.2.1 หรือไม่)
Alexander Mills

ใช่มีรุ่นที่ใหม่กว่าดังนั้นอย่าคัดลอกชิ้นส่วนด้านบน 1 ต่อ 1 ยกเว้นว่าคุณต้องการใช้รุ่น 1.2.1 ดูmojohaus.org/exec-maven-plugin/usage.htmlสำหรับรุ่นล่าสุด ณ ตอนนี้ มันคือ 1.6.0
user1053510

ขอบคุณคุณจะทราบวิธีการเรียกใช้คลาสหลักถ้าใน submodule กับการอ้างอิงในโมดูลอื่น ๆ
user1767316

นี่ไม่ได้เรียกใช้คลาสหลัก
Dexter

23

1. แก้ไข POM.xml

pom.xmlเพิ่มคุณสมบัติต่อไปนี้ใน ตรวจสอบให้แน่ใจว่าคุณใช้ชื่อคลาสที่ผ่านการรับรองโดยสมบูรณ์ (เช่นกับชื่อแพ็กเกจ) ซึ่งมีmainเมธอด:

<properties>
        <exec.mainClass>fully-qualified-class-name</exec.mainClass>
</properties>

2. เรียกใช้คำสั่ง

ตอนนี้จากเทอร์มินัลทริกเกอร์คำสั่งต่อไปนี้:

mvn clean compile exec:java

หมายเหตุคุณสามารถส่งผ่านข้อโต้แย้งเพิ่มเติมผ่านการ-Dexec.args="xxx"ตั้งค่าสถานะ


ใช้งานได้จริงหรือ ฉันลองเป็นทั้ง: <exec.mainClass> $ {foo.bar.SomeMainClass} </ exec.mainClass> และ <exec.mainClass> foo.bar.SomeMainClass </exec.mainClass> และมันไม่ทำงาน . ข้อผิดพลาดเหมือนกัน: [ข้อผิดพลาด] ล้มเหลวในการดำเนินการเป้าหมาย org.codehaus.mojo: exec-maven-plugin: 1.6.0: java (default-cli) ในโครงการ newtrex: พารามิเตอร์ 'mainClass' สำหรับเป้าหมาย org.codehaus.mojo : exec-maven-plugin: 1.6.0: java ขาดหายไปหรือไม่ถูกต้อง -> [ความช่วยเหลือ 1]
Nenad Bulatovic

ใช้งานได้คุณอาจต้องการตรวจสอบโพสต์นี้
Saikat

@NenadBulatovic: ใช้งานได้หากคุณแทนที่ $ {foo.bar.SomeMainClass} ด้วย foo.bar.SomeMainClass -> โดยไม่มี $ หรือ {}
Krishna Santosh Sampath

14

คำตอบดังกล่าวข้างต้นนั้นถูกต้อง แต่ฉันทำให้มันง่ายขึ้นสำหรับ noobs อย่างฉันไปที่ไฟล์ pom ของโปรเจคของคุณ เพิ่มคุณสมบัติใหม่exec.mainClassและให้ค่าเป็นคลาสซึ่งมีวิธีการหลักของคุณ สำหรับฉันมันเป็นในDriverClass mainpkgเปลี่ยนตามโครงการของคุณ ป้อนคำอธิบายรูปภาพที่นี่

มีการกระทำการสำรวจนี้ไปยังโฟลเดอร์ที่มีโครงการของคุณและเรียกใช้คำสั่งนี้ในพรอมต์pom.xml mvn exec:javaสิ่งนี้ควรเรียกเมธอดหลัก


8

ไม่จำเป็นต้องเพิ่มปลั๊กอินใหม่ใน pom.xml เพียงแค่เรียกใช้คำสั่งนี้

mvn org.codehaus.mojo:exec-maven-plugin:1.5.0:java -Dexec.mainClass="com.example.Main" | grep -Ev '(^\[|Download\w+:)' 

ดูปลั๊กอิน maven execสำหรับการใช้งานเพิ่มเติม


ผ่านการโต้แย้งเพิ่มเติมผ่าน-Dexec.args="...arg..."
sstn


2

clean package exec:java -P Class_Containing_Main_Method คำสั่งยังเป็นตัวเลือกหากคุณมีเพียงหนึ่งวิธีหลัก (PSVM) ในโครงการด้วยการตั้งค่า Maven ต่อไปนี้

อย่าลืมพูดถึงชั้นเรียนใน<properties></properties>ส่วนของpom.xml:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.main.class>com.test.service.MainTester</java.main.class>
</properties>

<plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <configuration>
           <mainClass>${java.main.class}</mainClass>
        </configuration>
</plugin>

STS Run Configuration พร้อมกับการตั้งค่า Maven ด้านบน:

ป้อนคำอธิบายรูปภาพที่นี่


นั่นดูไม่ถูกต้องสำหรับฉัน ไม่ใช่ -P สำหรับ 'โปรไฟล์' ใช่ไหม หากคุณกำลังระบุไว้ในบรรทัดคำสั่งทำไมคุณต้องใส่ไว้ในคุณสมบัติปลั๊กอิน
Rup

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