2010-03-18 36 views
77

Tôi muốn có một mục tiêu Maven kích hoạt việc thực hiện một lớp java. Tôi đang cố gắng để di chuyển trên một Makefile với các dòng:Làm cách nào để thực thi một chương trình bằng Maven?

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

Và tôi muốn mvn neotest để sản xuất những gì make neotest hiện đang làm.

Cả các trang exec plugin documentation cũng không phải Maven Ant tasks đều có bất kỳ loại ví dụ đơn giản nào.

Hiện nay, 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> 

Tôi không biết làm thế nào để kích hoạt các plugin từ dòng lệnh, mặc dù.

Trả lời

108

Với global configuration mà bạn đã xác định cho-maven-plugin exec:

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

gọi mvn exec:java trên dòng lệnh sẽ gọi các plugin mà được cấu hình để thực hiện các lớp org.dhappy.test.NeoTraverse.

Vì vậy, để kích hoạt các 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 mục tiêu exec:java như một phần của tiêu chuẩn xây dựng của bạn, bạn sẽ cần phải ràng buộc mục tiêu đến một giai đoạn cụ thể của số default lifecycle. Để làm điều này, bố phase mà bạn muốn để ràng buộc mục tiêu trong các yếu tố 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> 

Với ví dụ này, lớp học của bạn sẽ được thực hiện trong giai đoạn package. Đây chỉ là một ví dụ, thích ứng với nó cho phù hợp với nhu cầu của bạn. Hoạt động cũng với phiên bản plugin 1.1.

+1

tôi đã nhầm lẫn ban đầu: 'exec: java' có thể cũng được sử dụng cho mã Scala và Clojure, nó không phải là mã Java. – rightfold

+4

Phiên bản phải là 1.4.0 –

18

Để thực hiện nhiều chương trình, tôi cũng cần một phần 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> 
       <classpath/> 
       <argument>org.dhappy.test.NeoTraverse</argument> 
      </arguments> 
      </configuration> 
     </plugin> 
     </plugins> 
    </build> 
    </profile> 
</profiles> 

Đây là sau đó thực thi như:

mvn exec:exec -Dtraverse 
+0

Điều gì đang diễn ra với dòng chữ ' -classpath '? Tôi không nghĩ điều đó đúng. – GreenGiant

+0

Vâng, rất có thể thẻ ' 'đã đến đó do nhầm lẫn và phải bị xóa. Vì vậy, dòng đó sẽ chỉ nhìn: '-classpath' –

+3

Đó 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 tệp pom.xml nên được sử dụng như là một phần của đường dẫn lớp. – user924272

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