【问题标题】:maven exec:java run class file within jarmaven exec:java在jar中运行类文件
【发布时间】:2012-04-13 01:51:17
【问题描述】:

我已将代码打包到 jar 中

jar 打包好了。

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中运行class文件?

【问题讨论】:

标签: maven


【解决方案1】:

好的,这就是我最终要做的。
我使用

构建了 jar
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 的名称作为类路径传递

【讨论】:

    【解决方案2】:

    您需要将您的 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 声明。

    【讨论】:

    • 嗨,感谢您的信息,但这似乎只有在存储库中的 jar 时才有效。我想要做的是测试 jar,然后我可以将它安装到 repo 中。有什么方法可以指定 这个 jar 的位置 到 maven exec:java
    【解决方案3】:

    您可以通过添加一些arguments 来使用exec:java 目标运行一个jar 文件:

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

    【讨论】:

    • 如果我想将一些参数传递给org.example.Main类的main方法怎么办?
    • @prime 我还没有测试过,但我认为您可以使用&lt;commandlineArgs&gt; 将参数传递给实际应用程序
    • 感谢您的建议,将检查。无论如何得到了实际问题的答案stackoverflow.com/questions/42337857/…
    【解决方案4】:

    您必须指定 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 2011-11-25
      • 2016-07-20
      • 1970-01-01
      • 2011-04-12
      • 2021-12-28
      • 2016-11-07
      相关资源
      最近更新 更多