2012-03-23 77 views
202

我创建了一个使用Maven构建的简单控制台Java应用程序。有没有一种方式,主类(它不需要任何参数)可以在命令行使用Maven的命令等运行:运行Maven项目的主类

mvn run-app com.example.MainClass 

回答

403

尝试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> 
+0

这也是一个很好的。不知道它存在。 – 2012-03-23 20:30:26

+0

的作品像一个魅力 – 2012-03-23 20:49:11

+12

这种方式来运行主要类是不方便的:( – hugemeow 2012-09-18 10:40:25

12

虽然maven exec在这里做的伎俩,我发现它真的很差,真正的测试。在等待maven shell,并希望这可以帮助其他人,我终于出来这个回购mvnexec

克隆它,并符号链接script某处在你的路径。我使用~/bin/mvnexec,因为我的路径中有~/bin。我认为mvnexec是一个很好的脚本名称,但由您决定更改符号链接...

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

脚本搜索与主要方法类,提供了选择,选择一个(与Maven化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>

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

+1

请注意,这不会开箱在没有所需程序的Windows上。 – 2012-12-13 09:24:38

+0

的确如此。对于windows,你总是可以使用cygwin来获得* nix shell,例如grep,sed,cut ... – albfan 2012-12-15 13:14:35

+0

节省了很多时间,thnx – 2015-11-22 21:22:11