无法识别的选项:-cp,仅适用于Windows上的ProcessBuilder



因此,我正在开发一个跨平台引导程序,该程序在OSX/Linux上正常工作,但在Windows中返回以下错误消息:

错误:无法创建Java虚拟机。错误:发生致命异常。程序将退出。无法识别的选项:-cp C:/myapp/realm/binLauncher.jar;C:/myapp/_jvm/jre//lib/tools.jar;C:/myapp/realm/shared/lib/jetty-util-8.1.4.v20120524.jar

如果我打印出ProcessBuilder参数列表并在命令行上运行这些参数,它将成功运行。命令应该是

C:\myapp/_jvm/jre\bin\java-javaagent:C:/myapp/remarm/bin/spring-agent.jar-cp C:/myapp/realm/binLauncher.jar;C:/myapp/_jvm/jre//lib/tools.jar;C:/myapp/realm/shared/lib/jetty-util-8.1.4.v20120524.jar-Xmx256m-Xms200m-Xs128k-XX:+UseBiasedLocking-XX:+UseNUMA-DprocessType=realm-Dcert.framework.licet=C:/myapp/realm/license/my.license-Djava.security.policy=C:/myapp/remarm/security/java.policy-Djava.security.properties=C:/myapp/remarm/security/java.security-Djava.security.auth.login.config=C:/myapp/rerealm/security/jaas.conf-Drealm.home=C:/myapps/rerealm-Duser.dir=C:/myapp/rerealm/bin-Djava.背书.dirs=C:/myapp/领域/背书;C:/myapp/_jvm/jre/lib/背书-Djava.ext.dirs=C:/myapp/rerealm/ext;C:/myapp/_jvm/jre/lib/ext-Dlog4j.configuration=文件:C:\myapp/rerealm/conf/log4j.properties-Dorg.apache.commons.logging.Log=或g.apache.commons.loggin.impl.Log4JLogger com.myapp.launcher.ProviderLauncher

我曾尝试在类路径周围放置引号,使用双斜杠等,但都无济于事。。这是代码:

String mainClass = args[0];
String propFile = args[1];
FileInputStream fis =new FileInputStream(propFile);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String line = null;
ArrayList<String> argList = new ArrayList<String>();
while((line = br.readLine()) != null){
if(line.startsWith("#"))
continue;
String trimmedLine = line.trim();
if(trimmedLine.isEmpty())
continue;
Matcher m = p.matcher(trimmedLine);
StringBuffer sb = new StringBuffer();
while(m.find()){
String content = m.group(1);
String envContent = System.getenv(content);
if(envContent == null || envContent.isEmpty())
envContent = System.getProperty(content);
m.appendReplacement(sb, envContent);
}
m.appendTail(sb);
if(!sb.toString().startsWith(""-") && !sb.toString().startsWith("-") && argList.size() > 0)
argList.set(argList.size()-1, argList.get(argList.size()-1)+File.pathSeparator+sb.toString());
else argList.add(sb.toString());
}
ArrayList<String> cmdList = new ArrayList<String>();
cmdList.add(System.getenv("JAVA_HOME") + File.separator + "bin" + File.separator + "java");
cmdList.addAll(argList);
cmdList.add(mainClass);
System.out.println(cmdList.toString());
ProcessBuilder pb = new ProcessBuilder(cmdList);
new ProcessBuilder(line);
File f = new File(System.getenv("MY_DIR") + File.separator + "logs" +File.separator + "provider-console.log");
if(!f.exists())
f.createNewFile();
pb.redirectErrorStream(true);
pb.redirectOutput(f);
pb.directory(new File(System.getenv("MY_DIR") + File.separator + "bin"));
Process p = pb.start();

这是toStringed cmdList:

[C:/myapp/_jvm/jre\bin\java,-javaagent:C:/myapp/rerealm/bin/spring-agent.jar,-Xmx256m,-Xms200m,-Xss128k,-XX:+UseBiasedLocking,-XX:+UseNUMA,-cp C:/myapp/realm/binLauncher.jar;C:/myapp/_jmv/jre/../lib/tools.jar;C:/myapp/reRealm/shared/lib/jetty-util-8.1.4.v20120524.jar,-DprocessType=realm,-Dcert.framework.licet=C:/myapp/realm/license/jericho.license,-Djava.security.policy=C:/myapp/rerealm/sesecurity/java.policy,-Djava.security.properties=C:/myapp/rerealm/security/java.security,-Djava.security.auth.login.config=C:/myapp/rerealm/security/jaas.conf,-Dream.home=C:/myapp/rerealm,-Duser.dir=C:/myapps/rerealm/bin,-Djava.assioned.dirs=C:/mypp/realm/app/assioned;C:/myapp/_jvm/jre/lib/背书,-Djava.ext.dirs=C:/myapp/remarm/ext;C:/myapp/_jvm/jre/lib/ext,-Dlog4j.configuration=file:C:/myapp/rerealm/conf/log4j.properties,-Dorg.apache.commons.logging.Log=org.apache.commons.loggin.impl.Log4JLogger,com.myapp.slauncher.ProviderLauncher]

"-cp"和实际的类路径需要是args列表中的单独条目,当前它们似乎是一个用空格分隔的条目。

最新更新