Maven実行プロジェクト


231

Javaクラスのメインメソッドを単に実行するためのMavenの「フェーズ」または「目標」はありますか?「mvn run」などを実行するだけで手動でテストしたいプロジェクトがあります。

回答:


348

exec mavenプラグインを参照してください。以下を使用してJavaクラスを実行できます。

mvn exec:java -Dexec.mainClass="com.example.Main" [-Dexec.args="argument1"] ...

呼び出しはmvn exec:java、プラグイン構成がpom.xmlにあるかのように簡単にできます。Mojohausのプラグインサイトには、より詳細な例があります。

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>com.example.Main</mainClass>
                    <arguments>
                        <argument>argument1</argument>
                    </arguments>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

14
これは答えがどのように見えるべきかです!リファレンス+簡単な例+複雑な例。単純な例は私のためにトリックを行いました(これ以上の設定は必要ありません)
コードウィング

1
このプラグインの新しいバージョンはありますか(1.2.1より新しいですか?)
Alexander Mills

はい、新しいバージョンがあります。バージョン1.2.1を使用する場合を除き、上記のフラグメントを1対1でコピーしないでください。最新バージョンについては、mojohaus.org / exec-maven-plugin / usage.htmlを参照してください。1.6.0
user1053510 2017年

ありがとう、サブモジュールで他のモジュールに依存関係がある場合にメインクラスを実行する方法も知っていますか?
user1767316

これは、メインクラスを実際には実行しません
デクスター

23

1. POM.xmlを編集します

に次のプロパティを追加しますpom.xmlmainメソッドが含まれている完全修飾クラス名(つまり、パッケージ名付き)を使用していることを確認してください。

<properties>
        <exec.mainClass>fully-qualified-class-name</exec.mainClass>
</properties>

2.コマンドを実行する

端末から、次のコマンドをトリガーします。

mvn clean compile exec:java

-Dexec.args="xxx"フラグを介してさらに引数を渡すことができます。


これは実際に機能しますか?<exec.mainClass> $ {foo.bar.SomeMainClass} </ exec.mainClass>と<exec.mainClass> foo.bar.SomeMainClass </exec.mainClass>の両方として試してみましたが、機能しません。エラーは同じです:[ERROR]プロジェクトnewtrexでゴールorg.codehaus.mojo:exec-maven-plugin:1.6.0:java(default-cli)を実行できませんでした:ゴールorg.codehaus.mojoのパラメーター 'mainClass' :exec-maven-plugin:1.6.0:javaが見つからないか無効です-> [ヘルプ1]
Nenad Bulatovic

うまくいきました。この投稿を確認してください
Saikat

@NenadBulatovic:$ {foo.bar.SomeMainClass}をfoo.bar.SomeMainClass-> $または{}なしで置き換えると機能します
クリシュナサントシュサンパス

14

上記の答えは正しいですが、私のような初心者のために単純化しています。プロジェクトのpomファイルに移動します。新しいプロパティexec.mainClassを追加し、その値をメインメソッドを含むクラスとして指定します。私にとってそれはでしDriverClassmainpkg。プロジェクトごとに変更してください。 ここに画像の説明を入力してください

これを行ったら、プロジェクトを含むフォルダーに移動pom.xmlし、コマンドプロンプトでこれを実行しますmvn exec:java。これはmainメソッドを呼び出す必要があります。


8

pom.xmlに新しいプラグインを追加する必要はありません。このコマンドを実行するだけです

mvn org.codehaus.mojo:exec-maven-plugin:1.5.0:java -Dexec.mainClass="com.example.Main" | grep -Ev '(^\[|Download\w+:)' 

その他の使用法については、maven execプラグインを参照してください。


さらに引数を渡す-Dexec.args="...arg..."
sstn '28


2

clean package exec:java -P Class_Containing_Main_Method 次のMavenセットアップで、プロジェクトにMainメソッド(PSVM)が1つしかない場合も、コマンドはオプションです。

<properties></properties>セクションでクラスに言及することを忘れないでくださいpom.xml

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.main.class>com.test.service.MainTester</java.main.class>
</properties>

<plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <configuration>
           <mainClass>${java.main.class}</mainClass>
        </configuration>
</plugin>

上記のMavenセットアップとSTS実行構成:

ここに画像の説明を入力してください


それは私には正しくないようです。「プロファイル」の-Pではありませんか?コマンドラインでそれを指定している場合、なぜそれをプラグインのプロパティに置く必要があるのですか?
2015年

@Rupはい、-Pプロファイル用です。これは、Mavenプロジェクトを実行するオプションでもあるため、共有しました。
Abhijeet 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.