2012-03-29 36 views
6

Tôi có mã của tôi được đóng gói vào một cái bìnhmaven exec: java chạy tập tin lớp trong jar

Bình được đóng gói ok.

jar -tfv target/test-1.0-SNAPSHOT.jar 

com/ 
com/codevalid/ 
com/codevalid/App.class 
log4j.xml 
META-INF/maven/com.codevalid/test/pom.xml 
META-INF/maven/com.codevalid/test/pom.properties 

tôi có thể thực hiện chúng khi chúng hiện diện dưới dạng file lớp cá nhân sử dụng exec:java

Làm thế nào để chạy file class trong jar sử dụng maven exec:java?

+1

Câu hỏi của bạn là gì? – magomi

+0

Xin lỗi, Cách chạy tệp lớp trong jar bằng cách sử dụng lệnh maven exec: java – codevalid

+0

Điều này có thể hữu ích. http://stackoverflow.com/questions/42337857/mvn-execjava-to-run-a-java-file-in-an-external-jar-file – prime

Trả lời

3

Bạn cần phải bao gồm tệp jar của mình dưới dạng phụ thuộc vào plugin exec, ví dụ: như thế này:

<plugin> 
<groupId>org.codehaus.mojo</groupId> 
<artifactId>exec-maven-plugin</artifactId> 
<version>1.2.1</version> 
<executions> 
    <execution> 
    <phase>install</phase> 
    <goals> 
     <goal>java</goal> 
    </goals> 
    <configuration> 
     <mainClass>com.codevalid.App</mainClass> 
    </configuration> 
    </execution> 
</executions> 
<dependencies> 
    <dependency> 
    <groupId>myGroup</groupId> 
    <artifactId>test</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    </dependency> 
</dependencies> 

Bạn có thể bỏ qua việc kê khai dependency nếu lớp com.codevalid.App được biên dịch như là một phần của dự án hiện tại của bạn.

+1

Xin chào, Cảm ơn bạn đã thông tin, nhưng điều này dường như chỉ hoạt động nếu cái bình trong kho. Những gì tôi muốn làm là kiểm tra bình, trước khi tôi có thể cài đặt nó trong repo. Có cách nào mà tôi có thể chỉ định ** vị trí của jar này ** cho maven exec: java – codevalid

5

Ok, đây là điều cuối cùng tôi đã làm.
tôi đã xây dựng các jar sử dụng

mvn assembly:single 

và sử dụng

java -jar ./target/App-1.0-SNAPSHOT-jar-with-dependencies.jar com.codevalid.App 

tôi đã nhìn thấy một sự thay thế nơi mà tôi có thể sử dụng

mvn exec:java -Dexec.mainClass="com.codevalid.App" 

Nhưng tôi đã không chắc làm thế nào vượt qua tên của the jar làm đường dẫn class

0

Bạn phải chỉ định classpathScopebao gồm tham sốPluginDependencies hoặc includeProjectDependencies để nhận các tệp jar trên đường dẫn lớp.

Dưới đây là một ví dụ:

  <configuration> 
       <executable>java</executable> 
       <mainClass>com.google.jstestdriver.JsTestDriver</mainClass> 
       <classpathScope>test</classpathScope> 
       <includePluginDependencies>true</includePluginDependencies> 
       <includeProjectDependencies>true</includeProjectDependencies> 
       <commandlineArgs>--port 9876</commandlineArgs> 
      </configuration> 
1

Bạn có thể chạy một file jar bằng cách sử dụng mục tiêu exec:java bằng cách thêm một số arguments:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.3.2</version> 
    <configuration> 
     <mainClass>org.example.Main</mainClass> 
     <arguments> 
      <argument>-jar</argument> 
      <argument>target/myJar-1.0-SNAPSHOT.jar</argument> 
     </arguments> 
    </configuration> 
</plugin> 

Nếu bạn có một jar thực thi và không muốn xác định điểm vào, bạn cần đặt số executable và sử dụng mục tiêu exec:exec:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.3.2</version> 
    <configuration> 
     <executable>java</executable> 
     <arguments> 
      <argument>-jar</argument> 
      <argument>target/myJar-1.0-SNAPSHOT.jar</argument> 
     </arguments> 
    </configuration> 
</plugin> 
+0

Nếu tôi muốn chuyển một số đối số cho phương thức chính của lớp 'org.example.Main' thì sao? – prime

+1

@prime Tôi chưa thử nghiệm nó nhưng tôi nghĩ bạn có thể sử dụng [''] (http://www.mojohaus.org/exec-maven-plugin/exec-mojo.html#commandlineArgs) để chuyển đối số cho ứng dụng thực tế – Kapep

+0

Cảm ơn đề xuất, sẽ kiểm tra điều đó. Dù sao có một câu trả lời cho vấn đề thực tế http: // stackoverflow.com/questions/42337857/mvn-execjava-to-run-a-tệp java-in-an-external-jar-tệp – prime

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