Maven:コマンドラインから.javaファイルを実行して引数を渡す方法


87

次の問題があります。ファイルのmvnコマンドラインから実行したいのMain.javaですが。Main.javaパラメータを受け入れます。コマンドラインからどうすればいいですか?

例を探してみましたが、うまくいきませんでした。誰かがその例を教えてくれませんか?

私はここを見ましたが、何をすべきかよくわかりませんでした。

また、Main.javaフォルダーとは異なるフォルダーからそのコマンドを実行するにどうすればよいですか?

たとえば、Main.javaはにありmy/java/program/Main.javaます。何を入れればいいですか

mvn exec:java -Dexec.mainClass="what to put here?" -Dexec.args="arg0 arg1 arg2"

4
リンクされたチュートリアルから正確に何を理解しなかったのですか?そのかなり簡単です。これまでに試したコードを質問に追加してください。
認識

基本的に私がやろうとしていることは、別のJavaクラスからJavaクラスを呼び出すことです。通常、私はそのクラスをEclipseから実行します。私はRuntime.getRuntime()。exec( "");を使用しています。別のJavaプログラムからそのクラスを実行します。しかし、Main.classを実行するにはmvnが必要です。(質問を編集しました)
phedon rousou

回答:


147

実行できます:mvn exec:exec -Dexec.args="arg1"

これにより、引数arg1がプログラムに渡されます。

完全修飾されたメインクラスを指定する必要があります。たとえば、パッケージテストに含まれるMain.javaには、

mvn exec:java  -Dexec.mainClass=test.Main

ここで説明する-fように、パラメータを使用すると、他のディレクトリから実行することもできます。

mvn exec:java -Dexec.mainClass=test.Main -f folder/pom.xm

複数の引数については、コマンドラインで行うように、それらをスペースで区切るだけです。

mvn exec:java -Dexec.mainClass=test.Main -Dexec.args="arg1 arg2 arg3"

で区切られた引数のspace場合'argument separated with space' 、引用符の内側を使用してグループ化できます。

mvn exec:java -Dexec.mainClass=test.Main -Dexec.args="'argument separated with space' 'another one'"

はい、しかしmain.javaファイルがどこにあるかをどうやって知るのでしょうか?
phedon rousou 2012

pom.xmlがない場合はどうなりますか?次のエラーが表示されます。mojoを実行できません:java。既存のpom.xmlを含むプロジェクトが必要ですが、ビルドはそれを使用していません。
phedon rousou

Mavenプロジェクトでは、このファイルがないpom.xmlが必要です。mavenを使用してもほとんど意味がありません。では、最初にMavenプロジェクトを作成したいですか?その後、他のすべてのソリューションは問題なく機能するはずです。
Behe

私はEclipseをMavenプラグインで使用しているため、自動的に生成されると思いましたが、どうやら間違っていました。私はそれを調べます
フェドン・ルース

スペースを含む引数を渡す方法は?
Vanuan 2013年

6

mvn exec:java実行するだけでなく、mvn exec:exec

mvn exec:exec -Dexec.executable="java" -Dexec.args="-classpath %classpath your.package.MainClass"

この場合、Xmx引数はどこに配置しますか?
Fabich 2017年

1
それを入れてみてください-Dexec.argsmvn exec:exec -Dexec.executable="java" -Dexec.args="-Xmx4g -classpath %classpath your.package.MainClass"
ベネディクト・コッペル

Javaの:これは、より良い幹部の(IMO)まっすぐ進むのアプローチよりもなりますどこ私は表示されません
Neowizard

5

シェルスクリプトを追加すると、たとえばrun.sh、はるかに簡単になります。

#!/usr/bin/env bash
export JAVA_PROGRAM_ARGS=`echo "$@"`
mvn exec:java -Dexec.mainClass="test.Main" -Dexec.args="$JAVA_PROGRAM_ARGS"

それからあなたは実行することができます:

./run.sh arg1 arg2 arg3

これはうまくいきます!これがなぜか説明できますか:-Dexec.args = "$ @"
baumato

1
$@引用符で囲まれた文字列のリストにすべての引数を格納します。直接使用したい場合は$*、すべての引数を単一の文字列として使用できます。やってみましたか?
Tommy1005
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.