ฉันจะรันโปรแกรมโดยใช้ Maven ได้อย่างไร?


120

ฉันต้องการให้เป้าหมาย Maven กระตุ้นการทำงานของคลาสจาวา ฉันกำลังพยายามย้ายข้อมูลMakefileด้วยบรรทัด:

neotest:
    mvn exec:java -Dexec.mainClass="org.dhappy.test.NeoTraverse"

และฉันต้องการmvn neotestผลิตสิ่งที่make neotestทำอยู่ในปัจจุบัน

ทั้งเอกสารประกอบปลั๊กอิน execหรือหน้างาน Maven Antไม่มีตัวอย่างที่ตรงไปตรงมา

ปัจจุบันฉันอยู่ที่:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.1</version>
  <executions><execution>
    <goals><goal>java</goal></goals>
  </execution></executions>
  <configuration>
    <mainClass>org.dhappy.test.NeoTraverse</mainClass>
  </configuration>
</plugin>

ฉันไม่รู้วิธีเรียกใช้ปลั๊กอินจากบรรทัดคำสั่ง

คำตอบ:


149

ด้วยการกำหนดค่าส่วนกลางที่คุณได้กำหนดไว้สำหรับ exec-maven-plugin:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.4.0</version>
  <configuration>
    <mainClass>org.dhappy.test.NeoTraverse</mainClass>
  </configuration>
</plugin>

กล่าวอ้างในบรรทัดคำสั่งจะเรียกปลั๊กอินที่มีการกำหนดค่าในการดำเนินการในชั้นเรียนmvn exec:javaorg.dhappy.test.NeoTraverse

ดังนั้นในการเรียกใช้ปลั๊กอินจากบรรทัดคำสั่งเพียงแค่เรียกใช้:

mvn exec:java

ตอนนี้ถ้าคุณต้องการที่จะดำเนินการตามexec:javaเป้าหมายซึ่งเป็นส่วนหนึ่งของการสร้างมาตรฐานของคุณคุณจะต้องผูกเป้าหมายที่จะโดยเฉพาะอย่างยิ่งขั้นตอนของวงจรชีวิตเริ่มต้น ในการดำเนินการนี้ให้ประกาศสิ่งphaseที่คุณต้องการผูกเป้าหมายในexecutionองค์ประกอบ:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.4</version>
  <executions>
    <execution>
      <id>my-execution</id>
      <phase>package</phase>
      <goals>
        <goal>java</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <mainClass>org.dhappy.test.NeoTraverse</mainClass>
  </configuration>
</plugin>

ด้วยตัวอย่างนี้คลาสของคุณจะถูกดำเนินการในpackageช่วง นี่เป็นเพียงตัวอย่างปรับใช้ให้เหมาะกับความต้องการของคุณ ใช้งานได้กับปลั๊กอินเวอร์ชัน 1.1


1
ตอนแรกฉันสับสน: exec:javaสามารถใช้กับโค้ด Scala และ Clojure ได้เช่นกันไม่จำเป็นต้องเป็นรหัส Java ต่อ se
พับขวา

8
เวอร์ชันควรเป็น 1.4.0
Walery Strauch

ทำงานให้ฉัน! ขอบคุณ!
mrddr

25

ในการดำเนินการหลายโปรแกรมฉันยังต้องการprofilesส่วน:

<profiles>
  <profile>
    <id>traverse</id>
    <activation>
      <property>
        <name>traverse</name>
      </property>
    </activation>
    <build>
      <plugins>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>exec-maven-plugin</artifactId>
          <configuration>
            <executable>java</executable>
            <arguments>
              <argument>-classpath</argument>
              <argument>org.dhappy.test.NeoTraverse</argument>
            </arguments>
          </configuration>
        </plugin>
      </plugins>
    </build>
  </profile>
</profiles>

จากนั้นสามารถเรียกใช้งานได้เป็น:

mvn exec:exec -Ptraverse

1
เกิดอะไรขึ้นกับ<argument>-classpath</argument><classpath />บรรทัดนั้น? ฉันไม่คิดว่าถูกต้อง
GreenGiant

1
ใช่<classpath />แท็กส่วนใหญ่ไปที่นั่นโดยไม่ได้ตั้งใจและควรลบออก ดังนั้นเส้นจะมีลักษณะ:<argument>-classpath</argument>
Dimitry K

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