gpt4 book ai didi

java - 通过命令行中的批处理和 shell 脚本将可选的 jvm 参数传递给 java

转载 作者:行者123 更新时间:2023-11-30 06:31:02 24 4
gpt4 key购买 nike

有一个带有 main 方法的 java 类,例如 com.foo.Bar。但是这个类有两个可选的 vm(system) 参数,例如key1,key2

创建了一个批处理和 shell shell 脚本来分别调用上述程序,如下所示。

批处理文件的内容(barRunner.cmd)

@echo off
set CLASSPATH=/bla/;/bla/
java -cp %CLASSPATH% com.foo.Bar %*

Shell脚本的内容(barRunner.sh)

export CLASSPATH=/bla/:/bla/
java -cp $CLASSPATH com.foo.Bar $@

现在用户按以下方式调用,但是 Bar 类无法读取 vm 参数

barRunner.cmd -Dkey1=value1 

./barRunner.sh -Dkey2=value2 -Dkey1=value1

怀疑 vm 参数是在类之后传递的。

如何传递 vm 参数,以便它们在类名之前可用?

编辑:

已经尝试按如下方式更改脚本并且它有效。但是如果类有程序参数就会出现问题。

java -cp %CLASSPATH% %* com.foo.Bar

还知道JAVA_OPTS,但是对于天真的用户来说有点乏味;我的意思是,要运行多个命令(在一个命令中设置 JAVA_OPTS 并在另一行中调用脚本)并且犹豫是否使用这种方式。

因此考虑与论坛核实是否有更好的方法在单行中实现虚拟机和程序参数,并且两个参数都是可选的

最佳答案

VM 参数应该在类名之前传递,否则参数将成为您的程序参数,因此您的命令应该是:

java -cp $CLASSPATH "$@"com.foo.Bar

通过上述命令,您可以使用./barRunner.sh -Dkey2=value2 -Dkey1=value1运行。

现在一个小问题是所有参数都作为 VM 参数传递。您可能还想向您的程序传递一些参数。为此,您可以执行以下操作:

java -cp $CLASSPATH $JVM_ARGS com.foo.Bar "$@"

使用上面的命令,您可以传递 JVM 参数和程序参数,例如,

JVM_ARGS="-Dkey2=value2 -Dkey1=value1"./barRunner.sh programArg1 programArg2

关于java - 通过命令行中的批处理和 shell 脚本将可选的 jvm 参数传递给 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46126478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com