运行Maven项目的主类

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

mvn run-app com.example.MainClass 

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

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

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

如果你经常这样做,你也可以将参数添加到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在这里做的伎俩,我发现它真的很差testing。 在等待Maven shell的时候 ,希望这可以帮助别人,我终于出来了这个repo mvnexec

克隆它,并将脚本的符号链接到你的path中的某处。 我使用~/bin/mvnexec ,因为我的path中有~/bin 。 我认为mvnexec是脚本的一个好名字,但是由你来改变符号链接…

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

该脚本search与主要方法的类,提供一个select一个(例如JMven项目的mavenized )

 $ 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 #? 

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

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

它允许仅在testing类-M--no-main ,或者仅在主类中search-T--no-test 。 还有一个按名称过滤的选项-f <whatever>

希望这可以节省你一些时间,对我来说,它确实。