2012-03-29 115 views
6

我把我的代碼打包成一個罐子maven exec:java內部運行類文件

罐子打包好了。

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 

我可以執行他們所使用exec:java

如何運行使用maven exec:java JAR中的類文件中有個別類文件時?

+1

你的問題是什麼? – magomi 2012-03-29 12:11:27

+0

對不起,如何使用maven exec在jar中運行類文件:java – codevalid 2012-03-29 12:16:50

+0

這可能有幫助。 http://stackoverflow.com/questions/42337857/mvn-execjava-to-run-a-java-file-in-an-external-jar-file – prime 2017-02-20 10:31:58

回答

3

您需要將您的jar文件包含爲exec插件的依賴項,例如,像這樣:

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

如果com.codevalid.App類被編譯爲當前項目的一部分,你可以跳過dependency聲明。

+1

嗨,感謝您的信息,但這似乎只適用於庫中的jar。我想要做的就是測試jar,然後才能將其安裝在回購站中。有什麼辦法可以指定**這個jar的位置**給maven exec:java – codevalid 2012-03-29 16:52:30

5

好的,這是我最終做的。
我建立

mvn assembly:single 

罐子和用

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

我沒有看到我可以用

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

的選擇,但我不知道如何傳遞的名稱jar作爲類路徑

0

您必須指定classpathScopeincludePluginDependenciesincludeProjectDependencies參數用於拾取類路徑上的jar文件。

下面是一個例子:

  <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

您可以通過添加使用exec:java目標運行jar文件的一些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> 

如果你有一個可執行的JAR和不想定義入口點,您需要設置executable並使用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

如果我想將一些參數傳遞給org.example.Main類的主要方法,該怎麼辦? – prime 2017-02-20 06:13:29

+1

@prime我沒有測試過,但我認爲你可以使用[''](http://www.mojohaus.org/exec-maven-plugin/exec-mojo.html#commandlineArgs)將參數傳遞給實際應用 – Kapep 2017-02-20 12:36:45

+0

感謝您的建議,將檢查。無論如何得到了一個實際問題的答案http:// stackoverflow。COM /問題/ 42337857/MVN-execjava到運行-A-Java的文件中,一個外部的-JAR文件 – prime 2017-02-20 12:41:27