【发布时间】:2012-04-08 10:00:42
【问题描述】:
我创建了一个使用 Maven 构建的简单控制台 Java 应用程序。有没有一种方法可以使用 maven 命令从命令行运行主类(不需要任何参数),例如:
mvn run-app com.example.MainClass
【问题讨论】:
标签: java maven maven-2 maven-exec-plugin
我创建了一个使用 Maven 构建的简单控制台 Java 应用程序。有没有一种方法可以使用 maven 命令从命令行运行主类(不需要任何参数),例如:
mvn run-app com.example.MainClass
【问题讨论】:
标签: java maven maven-2 maven-exec-plugin
试试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>
【讨论】:
<properties><exec.mainClass>com.waisbrot.MainClass</exec.mainClass></properties>,现在我可以运行 mvn exec:java 这还不错。
-Dexec.classpathScope=test
虽然 maven exec 在这里可以做到这一点,但我发现它对于真正的测试来说非常糟糕。在等待maven shell,并希望这可以帮助其他人时,我终于来到了这个repo mvnexec
克隆它,并将script 符号链接到您路径中的某个位置。我使用~/bin/mvnexec,因为我的路径中有~/bin。我认为 mvnexec 是脚本的好名字,但要由您来更改符号链接...
从项目的根目录启动它,您可以在其中看到 src 和目标目录。
脚本搜索带有 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>
希望这可以为您节省一些时间,对我来说确实如此。
【讨论】: