web-dev-qa-db-ja.com

Mavenプロジェクトのメインクラスを実行する

私はMavenで構築された簡単なコンソールJavaアプリケーションを作成しました。メインクラス(引数を必要としない)は、次のようなmavenコマンドを使用してコマンドラインから実行することができます。

mvn run-app com.example.MainClass
238
Dónal

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>
501
Matthew Farwell

Maven execがここでトリックをするけれども、私はそれが本当のテストのためにかなり貧弱であるとわかりました。 Maven Shell を待っていて、これが他の人に役立つことを望んでいる間に、私はついにこのリポジトリに出ました mvnexec

クローンを作成し、パスのどこかに スクリプト をシンボリックリンクします。パスに~/bin/mvnexecがあるので、私は~/binを使用します。私はmvnexecがスクリプトの良い名前だと思いますが、シンボリックリンクを変更するのはあなた次第です...

Srcとtargetディレクトリを見ることができるあなたのプロジェクトのルートからそれを起動してください。

スクリプトを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
#? 

1つが選択されている場合(数字を入力している場合)、引数を要求されます(mvnexec -Pを使用すると回避できます)。

デフォルトでは実行ごとにプロジェクトをコンパイルします。しかしmvnexec -Bを使うことでそれを避けることができます

テストクラス-Mまたは--no-main、またはメインクラス-Tまたは--no-testでのみ検索できます。名前オプション-f <whatever>によるフィルタもあります。

これで時間が節約できることを願っています。私にとってはそうです。

15
albfan