5

在 pom.xml 中有一个用法,maven-dependency-plugin用于将特定的外部 JAR 文件下载到单独的位置(在 /tmp/externalTestJars/testjar.jar 中)。

我想用exec-maven-plugintestjar.jar文件(Main.java)中运行一个java类。

我发现这个 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>

在上面的 SO 问题中,它有一个类似下面的答案,可以在 .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 插件来完成,还是有任何其他方法可以做到这一点。

4

1 回答 1

5

如果要运行类似于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.Main定义为Main-ClassMANIFEST.MF)的类,则应按如下方式配置插件。

<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将附加到项目类路径中。

于 2017-02-20T09:33:07.417 回答