我创建了一个使用Maven构建的简单控制台Java应用程序。是否有一种方法可以使用maven命令从命令行运行主类(不需要任何参数):
mvn run-app com.example.MainClass
答案 0 :(得分:494)
试试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>
答案 1 :(得分:15)
虽然maven exec在这里做了伎俩,但我发现真正的测试很糟糕。在等待maven shell,并希望这可以帮助其他人时,我终于出现了这个回购mvnexec
克隆它,并在路径中的某处符号链接script。我使用~/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
#?
如果选择了一个(输入数字),则会提示您参数(您可以避免使用mvnexec -P
)
默认情况下,它会在每次运行时编译项目。但你可以使用mvnexec -B
它只允许在测试类-M
或--no-main
中搜索,或仅在主要类-T
或--no-test
中搜索。还有按名称选项-f <whatever>
希望这可以为你节省一些时间,对我而言。