通过命令行中的批处理和 shell 脚本将可选的 jvm 参数传递给 java
Passing optional jvm arguments to java thru batch and shell scripts in command line
用 main 方法得到了 java class,比如 com.foo.Bar
。但是这个 class 有两个可选的 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 参数 class
barRunner.cmd -Dkey1=value1
或
./barRunner.sh -Dkey2=value2 -Dkey1=value1
怀疑vm参数是在class之后传递的。
如何传递 vm 参数以便它们在 class 名称之前可用?
编辑:
已经尝试如下更改脚本并且有效。但是如果 class 有程序参数就会出现问题。
java -cp %CLASSPATH% %* com.foo.Bar
也知道JAVA_OPTS,但对于初学者来说有点乏味;我的意思是,多个命令是 运行(在一个命令中设置 JAVA_OPTS 并在另一行中调用脚本)并且犹豫是否使用这种方式。
所以考虑到论坛检查是否有更好的方法在单行中实现 vm 和程序参数,两个参数都是可选的。
VM 参数应在 class 名称之前传递,否则参数将成为您的程序参数,因此您的命令应为:
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
用 main 方法得到了 java class,比如 com.foo.Bar
。但是这个 class 有两个可选的 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 参数 class
barRunner.cmd -Dkey1=value1
或
./barRunner.sh -Dkey2=value2 -Dkey1=value1
怀疑vm参数是在class之后传递的。
如何传递 vm 参数以便它们在 class 名称之前可用?
编辑:
已经尝试如下更改脚本并且有效。但是如果 class 有程序参数就会出现问题。
java -cp %CLASSPATH% %* com.foo.Bar
也知道JAVA_OPTS,但对于初学者来说有点乏味;我的意思是,多个命令是 运行(在一个命令中设置 JAVA_OPTS 并在另一行中调用脚本)并且犹豫是否使用这种方式。
所以考虑到论坛检查是否有更好的方法在单行中实现 vm 和程序参数,两个参数都是可选的。
VM 参数应在 class 名称之前传递,否则参数将成为您的程序参数,因此您的命令应为:
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