运行 Maven 项目的主类

2022-08-31 05:15:32

我创建了一个简单的控制台Java应用程序,它是用Maven构建的。有没有办法使用maven命令从命令行运行主类(不需要任何参数),如下所示:

mvn run-app com.example.MainClass

答案 1

试试 maven-exec-plugin。从那里:

mvn exec:java -Dexec.mainClass="com.example.Main"

这将在 JVM 中运行您的类。您可以使用 来传递参数。-Dexec.args="arg0 arg1"

如果您使用的是 Windows,请为 和 应用报价:exec.mainClassexec.args

mvn exec:java -D"exec.mainClass"="com.example.Main"

如果您经常这样做,也可以将参数添加到 pom.xml:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.2.1</version>
  <executions>
    <execution>
      <goals>
        <goal>java</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <mainClass>com.example.Main</mainClass>
    <arguments>
      <argument>foo</argument>
      <argument>bar</argument>
    </arguments>
  </configuration>
</plugin>

答案 2

虽然maven exec在这里做得很好,但我发现它对于真正的测试来说很差。在等待maven shell的同时,并希望这可以帮助其他人,我终于来到了这个存储库mvnexec

克隆它,并将脚本符号链接到路径中的某个位置。我使用 ,就像我在我的路径中一样。我认为mvnexec是脚本的一个好名字,但由你来改变符号链接......~/bin/mvnexec~/bin

从项目的根目录启动它,您可以在其中查看 src 和目标 dirs。

脚本搜索具有main方法的类,提供选择以选择一个(使用mavenized JMeld项目的示例)

$ mvnexec 
 1) org.jmeld.ui.JMeldComponent
 2) org.jmeld.ui.text.FileDocument
 3) org.jmeld.JMeld
 4) org.jmeld.util.UIDefaultsPrint
 5) org.jmeld.util.PrintProperties
 6) org.jmeld.util.file.DirectoryDiff
 7) org.jmeld.util.file.VersionControlDiff
 8) org.jmeld.vc.svn.InfoCmd
 9) org.jmeld.vc.svn.DiffCmd
10) org.jmeld.vc.svn.BlameCmd
11) org.jmeld.vc.svn.LogCmd
12) org.jmeld.vc.svn.CatCmd
13) org.jmeld.vc.svn.StatusCmd
14) org.jmeld.vc.git.StatusCmd
15) org.jmeld.vc.hg.StatusCmd
16) org.jmeld.vc.bzr.StatusCmd
17) org.jmeld.Main
18) org.apache.commons.jrcs.tools.JDiff
#? 

如果选择了一个(键入数字),则会提示您输入参数(您可以使用mvnexec -P)

默认情况下,它每次运行都会编译项目。但你可以避免使用mvnexec -B

它只允许在测试类或 中搜索,或者只在主类中搜索。还具有按名称筛选选项-M--no-main-T--no-test-f <whatever>

希望这可以为您节省一些时间,对我来说确实如此。


推荐