【问题标题】:run main class of Maven project [duplicate]运行Maven项目的主类[重复]
【发布时间】:2012-04-08 10:00:42
【问题描述】:

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

mvn run-app com.example.MainClass

【问题讨论】:

    标签: java maven maven-2 maven-exec-plugin


    【解决方案1】:

    试试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 有一个内置约定的人吗你的主要课程是什么)。
    • @hugemeow 我在 POM 中添加了 &lt;properties&gt;&lt;exec.mainClass&gt;com.waisbrot.MainClass&lt;/exec.mainClass&gt;&lt;/properties&gt;,现在我可以运行 mvn exec:java 这还不错。
    • 如果类在测试目录中,也可以添加-Dexec.classpathScope=test
    • 查看此链接以获取 java9 模块:maven java 9
    【解决方案2】:

    虽然 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 &lt;whatever&gt;

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

    【讨论】:

    • 请注意,这在没有所需程序的 Windows 上无法开箱即用。
    • 确实如此。对于windows,你总是可以使用cygwin,得到一个*nix shell,比如grep,sed,cut ...
    • 节省了很多时间,thnx
    • 给出错误:无法在项目 srl 上执行目标 org.codehaus.mojo:exec-maven-plugin:1.5.0:exec (default-cli):执行目标 org.codehaus 的默认 cli .mojo:exec-maven-plugin:1.5.0:exec failed: Executable can not be empty -> [Help 1] 即使我指定了要运行的主类的编号
    猜你喜欢
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多