运行Maven项目的主要类

Dón*_*nal 254 java maven-2 maven maven-exec-plugin

我创建了一个使用Maven构建的简单控制台Java应用程序.是否有一种方法可以使用maven命令从命令行运行主类(不需要任何参数),如:

mvn run-app com.example.MainClass
Run Code Online (Sandbox Code Playgroud)

Mat*_*ell 529

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

mvn exec:java -Dexec.mainClass="com.example.Main"
Run Code Online (Sandbox Code Playgroud)

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

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

mvn exec:java -D"exec.mainClass"="com.example.Main"
Run Code Online (Sandbox Code Playgroud)

如果您经常这样做,您也可以将参数添加到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>
Run Code Online (Sandbox Code Playgroud)

  • 我是唯一一个希望maven有一个内置约定的人,你可以输入"mvn run",你的主程序的主类会自动运行,而不会告诉你应该已经知道的maven细节(就像你的主类是什么). (70认同)
  • @hugemeow我将`<properties> <exec.mainClass> com.waisbrot.MainClass </exec.mainClass> </ properties>`添加到我的POM中,现在我可以运行`mvn exec:java`这不是太糟糕了. (56认同)
  • 以这种方式运行主类是不方便的:( (17认同)
  • 如果类在测试目录中,您还可以添加`-Dexec.classpathScope = test` (17认同)

alb*_*fan 15

尽管maven exec在这里发挥了作用,但我发现它对于真正的测试来说非常糟糕.在等待maven shell的时候,希望这可以帮助别人,我终于出现了这个回购mvnexec

克隆它,并在路径中的某个位置对脚本进行符号链接.我使用~/bin/mvnexec,就像我~/bin在路上一样.我认为mvnexec是一个很好的脚本名称,但是你可以更改符号链接...

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

脚本使用main方法搜索类,提供select以选择一个(带有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
#? 
Run Code Online (Sandbox Code Playgroud)

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

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

它可以搜索仅在测试类-M--no-main,或仅在主类-T--no-test.还有一个名称过滤选项-f <whatever>

希望这可以为你节省一些时间,对我而言.

  • 请注意,这在Windows上没有开箱即用,没有所需的程序. (2认同)