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

Posted

技术标签:

【中文标题】Maven:如何从命令行传递参数运行 .java 文件【英文标题】:Maven: How to run a .java file from command line passing arguments 【发布时间】:2012-04-23 21:38:35 【问题描述】:

我有以下问题。我想从命令行运行mvn 以获得Main.java 文件。 Main.java 接受一个参数。 如何从命令行执行此操作?

我试图找到一个例子,但我没有成功。有人可以举个例子来帮助我吗?

我看了here,但不太明白我应该做什么。

另外,如何从不同于 Main.java 文件夹的文件夹执行该命令?

例如Main.java 位于my/java/program/Main.java。 我应该放什么

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

【问题讨论】:

您从链接的教程中到底有什么不明白的地方?它非常简单。请添加到您的问题中,您到目前为止尝试过的代码。 基本上我想做的是从另一个java类调用一个java类。通常我从 Eclipse 运行该类。我正在使用 Runtime.getRuntime().exec("");从另一个 java 程序执行该类。但是 Main.class 需要 mvn 才能运行。 (我编辑了问题) 【参考方案1】:

您可以运行:mvn exec:exec -Dexec.args="arg1"

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

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

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

通过使用-f 参数,如here 所述,您也可以从其他目录运行它。

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

对于多个参数,只需像在命令行中那样用空格分隔它们。

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

对于以 空格 分隔的参数,您可以在引号内使用'argument separated with space' 进行分组。

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

【讨论】:

是的,但是它怎么知道main.java文件的位置呢? 如果我没有 pom.xml 怎么办。我收到以下错误无法执行 mojo:java。它需要一个具有现有 pom.xml 的项目,但构建没有使用它。 一个maven项目需要一个pom.xml,没有这个文件,使用maven意义不大。那么,也许你想先创建一个 maven 项目?那么所有其他解决方案都应该可以正常工作。 因为我使用 Eclipse 和 maven 插件,我认为它是自动生成的,但显然我错了。我去看看 如何传递包含空格的参数?【参考方案2】:

添加一个 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="$@" $@ 将所有参数存储在用引号括起来的字符串列表中。如果您想直接使用它,您可以使用$* - 所有参数作为单个字符串。你试过了吗?【参考方案3】:

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

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

【讨论】:

在这种情况下我应该把 Xmx 参数放在哪里? 试着把它放到-Dexec.args:mvn exec:exec -Dexec.executable="java" -Dexec.args="-Xmx4g -classpath %classpath your.package.MainClass" 我看不出这会比 exec:java 的(IMO)直接方法更好

以上是关于Maven:如何从命令行传递参数运行 .java 文件的主要内容,如果未能解决你的问题,请参考以下文章

maven中运行java程序

通过 Gradle 运行 Java 类时传递系统属性和参数的问题

通过 Gradle 运行 Java 类时传递系统属性和参数的问题

从带有命令行参数的批处理文件运行控制台应用程序,如何在运行时传递参数值? [复制]

如何从 Maven 命令行远程调试 Java 应用程序

如何将命令行参数从pytest传递给代码