在两种情况下运行.jar文件时,处理参数的方式不同。传递带空格的参数时会出现问题。
Java对args
使用空格分隔,但是当用双引号括起时,可以传递带空格的参数。我用双引号传递每个参数,以防用户输入带空格的参数。
在一个实例中,我通过终端自己运行.jar文件,所有参数都处理得很好:
java -jar jarFile.jar "key1=Tmp" "key2=This is a value."
输出:
Retrieving arguments:
==> key1=Tmp
==> key2=This is a value.
而在另一个实例中,我想从另一个Java类执行这个.jar(注意:我不想创建一个类,因为我暂时避免了我正在使用的库中的一些错误)使用以下内容:
Process p = Runtime.getRuntime().exec("java -jar " + pluginPath + " " + "\"key1=Tmp\" \"key2=This is a value.\"");
输出:
Retrieving arguments:
==> key1=Tmp
==> key2=This
==> is
==> a
==> value.
解析参数的插件中的功能如下:
logger.info("Retreiving arguments: ");
String[] kvPairs = new String[args.length];
if (args.length > 0)
{
for (int i=0; i < args.length; i++)
{
kvPairs[i] = args[i].replaceAll("^\"|\"$", "");
logger.info("\t ==> " + args[i]);
}
}
// Enter the key-value pairs into a HashMap so we can retrieve the values easily.
Map<String,String> map = new HashMap<String,String>();
for (String entry : kvPairs)
{
String[] keyValue = entry.split("=");
map.put(keyValue[0].toLowerCase(), keyValue[1]);
}
最后一节仅与我解析args
后的值存储方式有关。
从终端运行.jar与通过Process
调用它是否有任何不同的功能差异可能导致同一个插件在两种情况下以不同方式解析参数?
答案 0 :(得分:2)
建议在管理参数时使用ProccessBuider,检查this answer它可能会对您有所帮助。 java args是public static void main(String[] args)
中传递的那些。