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

mvn run-app com.example.MainClass

试试maven-exec-plugin。从这里开始:

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

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

如果你在Windows上,为exec应用引号。mainClass和exec.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>

尽管maven exec在这里完成了任务,但我发现它对于真正的测试来说非常差。在等待maven shell的同时,并希望这可以帮助其他人,我终于出来了这个回购mvnexec

克隆它,并将脚本符号链接到路径中的某个地方。我使用~/bin/mvnexec,因为路径中有~/bin。我认为mvnexec是一个很好的脚本名称,但由您来更改符号链接…

从项目的根目录启动它,在这里可以看到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>

希望这能帮你节省点时间,对我来说确实如此。