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 文件的主要内容,如果未能解决你的问题,请参考以下文章
通过 Gradle 运行 Java 类时传递系统属性和参数的问题
通过 Gradle 运行 Java 类时传递系统属性和参数的问题