gpt4 book ai didi

java - 从批处理文件调用java - 如何拆分JVM和主方法参数?

转载 作者:行者123 更新时间:2023-11-30 03:46:20 24 4
gpt4 key购买 nike

我有一个 Windows 批处理文件来运行我的 Java 应用程序,因此如下所示:

RunJavaPgm.bat

java -classpath lib\* com.blah.MyClass %*

所以这工作得很好,我可以通过执行类似的操作将任意数量的参数传递给我的主方法

RunJavaPgm Param1 Param2

现在我遇到的问题是我需要定义一些系统属性,但是如果我尝试做类似的事情

RunJavaPgm Param1 Param2 -DMyProperty=MyValue

然后它不起作用 - 它将 -D 值传递给我的主要方法。将 "放在它周围没有什么区别。原因是,如果您只是在命令行上键入“java”,它会告诉您语法应该是什么:

java [-options] class [args]

因此,任何 -D 参数都需要放在类名之前,任何 main 方法参数都需要放在类名之后。让批处理文件足够智能来检查传递给它的每个参数的值并以这种方式分割它们似乎很难做到,有人能想到任何聪明的替代方案吗?

非常感谢!

相关 - batch file to run jar file with parameters

最佳答案

试试这个:

@echo off

setlocal EnableDelayedExpansion

set "jvm_args="
set "main_args="
set flag=0

for %%a in (%*) do (

set arg=%%~a


if !flag! EQU 0 if "!arg:~0,1!" NEQ "-" (
set "main_args= !main_args! %%a"
set flag=2
)

if "!arg:~0,1!" EQU "-" (
set "jvm_args=!jvm_args! !arg!"
set flag=1
)

if !flag! EQU 1 if "!arg:~0,1!" NEQ "-" (
set "jvm_args=!jvm_args!=!arg!"
set flag=0
)

)

::remove echo to run the java
echo java %jvm_args% com.blah.MyClass %main_args%

它检查以 - 开头的参数,并将其(下一个作为 = 是批处理的分隔符)放入 jvm 参数,其余放入 java 参数。这不是完美的解决方案(并且没有经过严格的测试),但可能会做你想要的事情。

编辑:尝试处理引用的 jvm 参数:

@echo off

setlocal EnableDelayedExpansion

set "jvm_args="
set "main_args="
set flag=0

for %%a in (%*) do (

set "arg=%%~a"

echo #!arg:~0,1!#

if !flag! EQU 0 if "!arg:~0,1!" NEQ "-" (
set "main_args= !main_args! %%a"
set flag=2
)

if "!arg:~0,1!" EQU "-" (
set "jvm_args=!jvm_args! !arg!"
set flag=1
echo !arg!|find "=" >nul 2>&1 && set flag=0

)

if !flag! EQU 1 if "!arg:~0,1!" NEQ "-" (
set "jvm_args=!jvm_args!=!arg!"
set flag=0
)

)

::remove echo to run the java
echo java %jvm_args% com.blah.MyClass %main_args%

关于java - 从批处理文件调用java - 如何拆分JVM和主方法参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25608260/

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