2017-02-20 75 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