2017-02-20 243 views
0

在pom.xml中,使用maven-dependency-plugin將特定的外部JAR文件下載到單獨位置(位於/tmp/externalTestJars/testjar.jar中) 。mvn exec:java在外部JAR文件中運行java文件

我想用exec-maven-plugintestjar.jar文件(Main.java)中運行java類。

我發現this SO question問有點相同的問題,但對於這個問題的答案沒有幫助我。

如果我直接運行Main.java文件(在創建.jar的原始項目中,使用mvn exec:java),我可以使用下面的pom配置。

<plugin> 
<groupId>org.codehaus.mojo</groupId> 
<artifactId>exec-maven-plugin</artifactId> 
<version>1.3.2</version> 
<configuration> 
    <mainClass>org.example.Main</mainClass> 
    <!-- need to pass two arguments to the Main.java file main method --> 
    <arguments> 
     <argument>arg one</argument> 
     <argument>arg two</argument> 
    </arguments> 
</configuration> 
</plugin> 

在上面的問題中,它有一個類似下面的答案在.jar文件中運行java文件。

<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>/tmp/externalTestJars/testjar.jar</argument> 
    </arguments> 
</configuration> 
</plugin> 

但在我的情況下,這些參數將被視爲一個通過在Main.java正弦的主要方法是期待兩個參數。所以這種方法對我不起作用。

這可以使用exec maven插件來完成,或者是否有任何其他方法可以做到這一點。

+0

如果插件的.jar下載位置無關緊要,這也可能有所幫助。所以我們可以添加它作爲插件依賴項。 http://www.mojohaus.org/exec-maven-plugin/examples/example-exec-using-plugin-dependencies.html – prime

回答

1

如果您想運行類似於java -cp /tmp/externalTestJars/testjar.jar org.example.Main的類,應該按如下配置插件。

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.3.2</version> 
    <configuration> 
     <executable>java</executable> 
     <arguments> 
      <argument>-cp</argument> 
      <argument>/tmp/externalTestJars/testjar.jar</argument> 
      <argument>org.example.Main</argument> 
     </arguments> 
    </configuration> 
</plugin> 

如果你想運行類似java -jar /tmp/externalTestJars/testjar.jar類的插件(假設org.example.MainMANIFEST.MF定義爲Main-Class)應配置如下。

<configuration> 
    <executable>java</executable> 
    <arguments> 
     <argument>-jar</argument> 
     <argument>/tmp/externalTestJars/testjar.jar</argument> 
    </arguments> 
</configuration> 

在這兩種情況下,與mvn exec:exec

編輯運行:使用mvn exec:java一個例子。

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.3.2</version> 
    <executions> 
     <execution> 
      <phase>install</phase> 
      <goals> 
       <goal>java</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <mainClass>org.example.Main</mainClass> 
     <additionalClasspathElements> 
      <additionalClasspathElement> 
       /tmp/externalTestJars/testjar.jar 
      </additionalClasspathElement> 
     </additionalClasspathElements> 
    </configuration> 
</plugin> 

注:如果項目和jar文件testjar.jar都包含類org.example.Main然後從項目的類將被執行。由additionalClasspathElement定義的類路徑元素將被附加到項目類路徑中。

+0

偉大的(Y)這似乎是解決問題的辦法。謝謝。 – prime

+0

順便說一下,我們可以通過mvn exec:java來實現這一點,以便我們可以在pom中設置Main類。 – prime

+0

@prime查看'exec:java'的例子。 – SubOptimal