Làm cách nào để thực hiện một chương trình bằng Maven?


120

Tôi muốn có một mục tiêu Maven kích hoạt việc thực thi một lớp java. Tôi đang cố gắng di chuyển qua a Makefilevới các dòng:

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

Và tôi muốn mvn neotestsản xuất những gì make neotesthiện tại.

Cả tài liệu plugin thực thi và các trang nhiệm vụ của Maven Ant đều không có bất kỳ loại ví dụ đơn giản nào.

Hiện tại, tôi đang ở:

<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>

Tuy nhiên, tôi không biết cách kích hoạt plugin từ dòng lệnh.

Câu trả lời:


149

Với cấu hình chung mà bạn đã xác định cho thực thi-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:javalệnh gọi trên dòng lệnh sẽ gọi plugin được cấu hình để thực thi lớp org.dhappy.test.NeoTraverse.

Vì vậy, để kích hoạt plugin từ dòng lệnh, chỉ cần chạy:

mvn exec:java

Bây giờ, nếu bạn muốn thực hiện exec:javamục tiêu như một phần của bản dựng chuẩn, bạn sẽ cần phải ràng buộc mục tiêu với một giai đoạn cụ thể của vòng đời mặc định . Để thực hiện việc này, hãy khai báo mục phasetiêu mà bạn muốn ràng buộc trong executionphần tử:

<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>

Với ví dụ này, lớp của bạn sẽ được thực thi trong packagegiai đoạn này. Đây chỉ là một ví dụ, hãy điều chỉnh nó cho phù hợp với nhu cầu của bạn. Cũng hoạt động với phiên bản plugin 1.1.


1
Lúc đầu, tôi đã bối rối: exec:javacó thể được sử dụng cho mã Scala và Clojure, nó không nhất thiết phải là mã Java.
đúng

8
Version nên 1.4.0
Walery STRAUCH

Đã làm cho tôi! Cám ơn!
mrddr

25

Để thực thi nhiều chương trình, tôi cũng cần một profilesphần:

<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>

Sau đó, điều này có thể thực thi như:

mvn exec:exec -Dtraverse

1
Chuyện gì đang xảy ra với <argument>-classpath</argument><classpath />dòng đó ? Tôi không nghĩ điều đó chính xác.
GreenGiant

1
Vâng, rất có thể <classpath />thẻ đã đến đó do nhầm lẫn và cần được xóa. Vì vậy, dòng đó sẽ trông giống:<argument>-classpath</argument>
Dimitry K

7
Đó không phải là một sai lầm. Điều đó chỉ ra rằng các phụ thuộc được chỉ định trong pom.xml nên được sử dụng như một phần của đường dẫn lớp.
user924272
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.