运行Maven项目的主类

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

mvn run-app com.example.MainClass
339308 次浏览

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

尽管maven exec在这里完成了任务,但我发现它对于真正的测试来说非常差。在等待maven壳的时候,并希望这可以帮助其他人,我终于出来了这个回购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>的过滤器

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