Maven:如何从命令行传递参数运行.java文件

phe*_*sou 82 java arguments maven

我有以下问题.我想从命令行运行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"
Run Code Online (Sandbox Code Playgroud)

Beh*_*ehe 136

你可以跑:mvn exec:exec -Dexec.args="arg1".

这会将参数arg1传递给您的程序.

您应该指定主类完全限定,例如,包测试中需要的Main.java

mvn exec:java  -Dexec.mainClass=test.Main
Run Code Online (Sandbox Code Playgroud)

通过使用此处描述-f参数,您还可以从其他目录运行它.

mvn exec:java -Dexec.mainClass=test.Main -f folder/pom.xm
Run Code Online (Sandbox Code Playgroud)

对于多个参数,只需将它们与命令行中的空格分开即可.

mvn exec:java -Dexec.mainClass=test.Main -Dexec.args="arg1 arg2 arg3"
Run Code Online (Sandbox Code Playgroud)

对于用a分隔的参数space,您可以'argument separated with space' 在引号内使用分组.

mvn exec:java -Dexec.mainClass=test.Main -Dexec.args="'argument separated with space' 'another one'"
Run Code Online (Sandbox Code Playgroud)


Tom*_*005 8

添加一个shell脚本例如run.sh使它更容易:

#!/usr/bin/env bash
export JAVA_PROGRAM_ARGS=`echo "$@"`
mvn exec:java -Dexec.mainClass="test.Main" -Dexec.args="$JAVA_PROGRAM_ARGS"
Run Code Online (Sandbox Code Playgroud)

然后你就可以执行:

./run.sh arg1 arg2 arg3
Run Code Online (Sandbox Code Playgroud)

  • `$@` 将所有参数存储在用引号引起来的字符串列表中。如果你想直接使用它,你可以使用 `$*` - 所有参数作为单个字符串。你尝试过这个吗? (2认同)

Ben*_*pel 6

除了使用运行mvn exec:java,您还可以使用mvn exec:exec

mvn exec:exec -Dexec.executable="java" -Dexec.args="-classpath %classpath your.package.MainClass"
Run Code Online (Sandbox Code Playgroud)