java程序调用CMD命令启动tomcat替换环境变量
出现问题:
此时不应有 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; } |
java程序调用CMD命令启动tomcat替换环境变量的更多相关文章
- Java程序执行cmd命令
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.i ...
- JAVA中调用CMD命令,并输出运行结果
package com.wzw.util; import java.io.BufferedReader; import java.io.InputStreamReader; public class ...
- C#程序调用cmd执行命令
对于C#通过程序来调用cmd命令的操作,网上有很多类似的文章,但很多都不行,竟是漫天的拷贝.我自己测试整理了一下. 代码: string str = Console.ReadLine(); Syste ...
- C#程序调用cmd执行命令(转)
C#通过程序来调用cmd命令的操作 string str = Console.ReadLine(); System.Diagnostics.Process p = new System.Diagnos ...
- c# 程序调用cmd执行命令如SVN.exe
c# 程序调用cmd执行命令如SVN.exe string str = Console.ReadLine(); System.Diagnostics.Process p = new System.Di ...
- C#程序调用CMD执行命令,将参数传递给cmd.exe
proc.StartInfo.Arguments = "/c ping 10.2.2.125"; C#程序调用CMD执行命令 将参数传递给cmd.exe的(Passing an a ...
- 通过java程序调用ant build.xml配置文件中指定的target
一.概述 通过ant实现项目的自动化部署,jar包生成,替换,tomcat关停.启动,查看项目日志: 通过java程序调用已编辑好的ant脚本build.xml配置文件中指定的target: 文中文件 ...
- Java程序调用带参数的shell脚本返回值
Java程序调用带参数的shell脚本返回值 首先来看看linux中shell变量(\(#,\)@,$0,$1,\(2)的含义解释 变量说明: - \)$ Shell本身的PID(ProcessI ...
- 如何在cmd窗口启动Tomcat
平时,一般使用tomcat/bin/startup.bat目录在windows环境启动Tomcat,或者使用IDE配置后启动. 下面来简单介绍下如果在cmd窗口直接输入命令启动Tomcat: 1.将t ...
随机推荐
- 网络-tcp
1.TCP:面向连接可靠的传输协议,全拼:Transmission Control Protocol 2.UDP:用户数据报协议 全拼:User Datagram protocol 不是面向连接的 ...
- Java开源生鲜电商平台-购物车模块的设计与架构(源码可下载)
ava开源生鲜电商平台-购物车模块的设计与架构(源码可下载) 说明:任何一个电商无论是B2C还是B2B都有一个购物车模块,其中最重要的原因就是客户需要的东西放在一起,形成一个购物清单,确认是否有问题, ...
- CAS 4.0 单点登录教程
CAS 单点登录指导文档 1.概述 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所 ...
- java位 、字节 、字符的梳理
1字节(byte)=8位(bit) char=2字节(这是因为char是Java中的保留字,Java用的是Unicode,所以char在Java中是16位即2个字节的.) 附: String str= ...
- Linux网络简介
Linux的网络简介 1.TCP/IP协议簇 (通俗的解释就是为了网路传输指定的一种标准),它将网络划分为四层:应用层 .传输层.互联层 .网络接口层 . 基础层是网络接口层(说白了就是把帧格式的数 ...
- How to distribute a database among microservices
在为相对复杂的企业域构建微服务时,我们需要找到在这个域中不同责任的边界.在每个边界中,我们会创建领域模型,这个模型是针对业务责任所设计的,并反映了这种业务责任.针对每个边界的数据模型会由同一个边界中的 ...
- JavaScript prototype详解
用过JavaScript的同学们肯定都对prototype如雷贯耳,但是这究竟是个什么东西却让初学者莫衷一是,只知道函数都会有一个prototype属性,可以为其添加函数供实例访问,其它的就不清楚了, ...
- 玩转Web之SSH--Heibernate (一)---第一个demo
最近在学heibernate,是看马士兵老师的视频学的,在这里总结一下,做点笔记.关于heibernate的优点,大家可以在网上 百度,这里不做赘述,直接讲怎么使用heibernate 步骤一:新建项 ...
- python读文件的三个方法read()、readline()、readlines()详解
文件 runoob.txt 的内容如下: 1:www.runoob.com2:www.runoob.com3:www.runoob.com4:www.runoob.com5:www.runoob.co ...
- Java Script中常见操作
字符串常见操作:obj.length 长度obj.trim() 移除空白obj.trimLeft()obj.trimRight)obj.charAt(n) 返回字符串中的第n个字符obj.concat ...