java程序调用CMD命令启动tomcat替换环境变量
2019-04-29 08:51:11来源:博客园 阅读 ()
出现问题:
此时不应有 Files\Java\jdk1.8.0_92\bin\java.exe""(本地未出现问题,服务器环境出现)
出现原因:
1:环境变量JAVA_HOME配置路径中的空格问题
2:系统环境变量路径首尾出现双引号 " 为多余
解决方法:
1:原路径C:\Program Files\Java\jdk1.8.0_92,需替换为C:\Progra~1\Java\jdk1.8.0_92 ;
2:将相关环境变量路径的首尾双引号 “ 去掉 ;
如:
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future;
public static Map<String, String> execute(String directory,String[] cmd){ Map<String, String> result = new HashMap<>(); Process p = null; try { ProcessBuilder builder = new ProcessBuilder(cmd); File file = new File(directory) ; builder.directory(file); Map<String, String> env = builder.environment(); env.put("CATALINA_HOME", file.getParent()); env.put("CATALINA_BASE", file.getParent()); logger.info("=: -----------------------"); for(String str : env.keySet()){ if(env.get(str) != null){ env.put(str, env.get(str).replaceAll("Program Files", "PROGRA~1")); } logger.info(str+"=: "+env.get(str)); } logger.info("=: -----------------------"); String javaHome = System.getenv("JAVA_HOME"); if(StringUtils.isNotEmpty(javaHome)) { javaHome = javaHome.replace("%20", " ").replaceAll("Program Files", "PROGRA~1"); } env.put("JAVA_HOME", javaHome); //环境可能是Path 或 PATH String _Path = env.get("Path"); if(StringUtils.isNotEmpty(_Path)){ env.put("Path", _Path.replaceAll("\"", "")); } String _PATH = env.get("PATH"); if(StringUtils.isNotEmpty(_PATH)){ env.put("PATH", _PATH.replaceAll("\"", "")); } String _EXECJAVA = env.get("_EXECJAVA"); if(StringUtils.isNotEmpty(_EXECJAVA)){ env.put("_EXECJAVA", _EXECJAVA.replaceAll("\"", "")); } String _RUNJAVA = env.get("_RUNJAVA"); if(StringUtils.isNotEmpty(_RUNJAVA)){ env.put("_RUNJAVA", _RUNJAVA.replaceAll("\"", "")); } String _RUNJDB = env.get("_RUNJDB"); if(StringUtils.isNotEmpty(_RUNJDB)){ env.put("_RUNJDB", _RUNJDB.replaceAll("\"", "")); } for(String str : env.keySet()){ logger.info(str+"=: "+env.get(str)); } logger.info("正在执行命令...." + builder.directory()); p = builder.start(); logger.info("正在执行命令...."); InputStream errorStream = p.getErrorStream(); ExecutorService exec = Executors.newCachedThreadPool(); Future<String> errorSubmit = exec.submit(new WorkCallable(p, errorStream,"ERROR")); InputStream correctStream = p.getInputStream(); Future<String> correctSubmit = exec.submit(new WorkCallable(p, correctStream,"STDOUT")); logger.info("正在执行命令2...."); String errorMsg = errorSubmit.get(); String successMsg = correctSubmit.get(); logger.info(errorMsg); logger.info(successMsg); if(StringUtils.isEmpty(errorMsg)) { result.put("status", "success"); result.put("msg", successMsg); } else { result.put("status", "error"); result.put("msg", errorMsg); } p.waitFor(); exec.shutdown(); } catch (Exception e) { result.put("status", "error"); result.put("msg", e.getMessage()); logger.error("执行命令异常,请检查参数",e.getMessage()); } return result; } |
原文链接:https://www.cnblogs.com/liujf-a-mad-man/p/10785449.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash