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


88

我有以下问题。我想运行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
您从链接教程中到底不了解什么?它很简单。请在您的问题中添加您到目前为止尝试过的代码。
感知2012年

基本上我想做的是从另一个Java类调用一个Java类。通常,我从Eclipse运行该类。我正在使用Runtime.getRuntime()。exec(“”); 从另一个Java程序执行该类。但是Main.class需要mvn才能运行。(我编辑了问题)
phedon rousou 2012年

Answers:


151

您可以运行: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'"

1
是的,但是它如何知道main.java文件的位置?
phedon rousou 2012年

如果我没有pom.xml,该怎么办。我收到以下错误无法执行mojo:java。它需要一个具有现有pom.xml的项目,但是构建未使用该项目。
phedon rousou 2012年

一个maven项目需要一个pom.xml,而没有这个文件,使用maven毫无意义。因此,也许您想先创建一个Maven项目?然后,所有其他解决方案都应该可以正常工作。
Behe 2012年

因为我将Eclipse与Maven插件一起使用,所以我认为它是自动生成的,但显然我错了。我将研究一下
phedon rousou 2012年

如何传递包含空格的参数?
Vanuan

6

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

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

在这种情况下,我将Xmx参数放在哪里?
比奇

1
尝试将其放入-Dexec.argsmvn exec:exec -Dexec.executable="java" -Dexec.args="-Xmx4g -classpath %classpath your.package.MainClass"
BenediktKöppel17年6

我看不出有什么比exec:java的(IMO)直接方法更好的地方了
Neowizard

5

添加一个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.sh arg1 arg2 arg3

这很棒!您能解释一下为什么不这样做吗:-Dexec.args =“ $ @”
baumato

1
$@将所有参数存储在用引号引起来的字符串列表中。如果要直接使用它,则可以使用$*-所有参数作为单个字符串。你有尝试过吗?
Tommy1005
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.