diff --git a/.idea/libraries/Maven__org_yaml_snakeyaml_1_30.xml b/.idea/libraries/Maven__org_yaml_snakeyaml_1_30.xml new file mode 100644 index 0000000..8d3fa98 --- /dev/null +++ b/.idea/libraries/Maven__org_yaml_snakeyaml_1_30.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/BKPG_PROTOCAL/src/main/java/top/dreamcenter/bkpg/protocal/template/ProcessAppTemplate.java b/BKPG_PROTOCAL/src/main/java/top/dreamcenter/bkpg/protocal/template/ProcessAppTemplate.java index f1d6d7d..bb4e358 100644 --- a/BKPG_PROTOCAL/src/main/java/top/dreamcenter/bkpg/protocal/template/ProcessAppTemplate.java +++ b/BKPG_PROTOCAL/src/main/java/top/dreamcenter/bkpg/protocal/template/ProcessAppTemplate.java @@ -7,6 +7,7 @@ import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; +import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.text.SimpleDateFormat; @@ -30,6 +31,16 @@ public abstract class ProcessAppTemplate implements MiniApp, ActionListener { */ public abstract String getCmdStr(); + /** + * 路径位置 + * + * 默认null + * @return 执行命令所在路径 + */ + public String getRunPath() { + return null; + } + @Override public JPanel getPanel() { JPanel panel = new JPanel(); @@ -96,7 +107,17 @@ public abstract class ProcessAppTemplate implements MiniApp, ActionListener { return; } try { - process = Runtime.getRuntime().exec(getCmdStr()); + File file = null; + + if (getRunPath() != null && !getRunPath().equals("")) { + file = new File(getRunPath()); + if (!file.exists()) { + failWrite("未找到启动路径:" + getRunPath()); + return; + } + } + + process = Runtime.getRuntime().exec(getCmdStr(), null, file); successWrite("启动成功!"); heartbeatCheck(); String tmp; diff --git a/PLUGIN_BKPG_GROUP_PROCESS/PLUGIN_BKPG_GROUP_PROCESS.iml b/PLUGIN_BKPG_GROUP_PROCESS/PLUGIN_BKPG_GROUP_PROCESS.iml index 4ccc645..eb986d3 100644 --- a/PLUGIN_BKPG_GROUP_PROCESS/PLUGIN_BKPG_GROUP_PROCESS.iml +++ b/PLUGIN_BKPG_GROUP_PROCESS/PLUGIN_BKPG_GROUP_PROCESS.iml @@ -13,6 +13,7 @@ - + + \ No newline at end of file diff --git a/PLUGIN_BKPG_GROUP_PROCESS/pom.xml b/PLUGIN_BKPG_GROUP_PROCESS/pom.xml index 0129a28..7e151a1 100644 --- a/PLUGIN_BKPG_GROUP_PROCESS/pom.xml +++ b/PLUGIN_BKPG_GROUP_PROCESS/pom.xml @@ -20,6 +20,13 @@ top.dreamcenter.bkpg BKPG_PROTOCAL ${revision} + provided + + + + org.yaml + snakeyaml + 1.30 @@ -27,10 +34,23 @@ org.apache.maven.plugins - maven-jar-plugin + maven-assembly-plugin + + jar-with-dependencies + + false ${project.parent.basedir}/ext + + + make-assembly + package + + single + + + diff --git a/PLUGIN_BKPG_GROUP_PROCESS/src/main/java/top/dreamcenter/bkpg/group/ProcessGroupApp.java b/PLUGIN_BKPG_GROUP_PROCESS/src/main/java/top/dreamcenter/bkpg/group/ProcessGroupApp.java index 42bf796..c12e1ff 100644 --- a/PLUGIN_BKPG_GROUP_PROCESS/src/main/java/top/dreamcenter/bkpg/group/ProcessGroupApp.java +++ b/PLUGIN_BKPG_GROUP_PROCESS/src/main/java/top/dreamcenter/bkpg/group/ProcessGroupApp.java @@ -1,12 +1,13 @@ package top.dreamcenter.bkpg.group; +import top.dreamcenter.bkpg.group.bean.ProcessConfigBean; +import top.dreamcenter.bkpg.group.util.YamlUtil; import top.dreamcenter.bkpg.protocal.MiniApp; import top.dreamcenter.bkpg.protocal.MiniAppGroup; import top.dreamcenter.bkpg.protocal.template.ProcessAppTemplate; -import java.io.BufferedReader; -import java.io.FileInputStream; -import java.io.InputStreamReader; +import javax.swing.*; +import java.awt.*; import java.util.LinkedList; import java.util.List; @@ -14,36 +15,65 @@ public class ProcessGroupApp implements MiniAppGroup { @Override public List getMiniApps() { + ProcessConfigBean processConfig = null; List list = new LinkedList<>(); + try { + processConfig = YamlUtil.getProcessConfig("ext/ProgressGroup.yml"); - - try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("ext/ProgressGroup.txt")))) { - - String line; - while ((line = reader.readLine()) != null) { - String[] split = line.split(": "); - - String appName = split[0]; - String appCmd = split[1]; - + // 从配置装载命令 + for (ProcessConfigBean.ProcessBean bean : processConfig.getProcessBeanList()){ MiniApp miniApp = new ProcessAppTemplate() { @Override public String getCmdStr() { - return appCmd; + return bean.getCmd(); } @Override public String getName() { - return appName; + return bean.getName(); + } + + @Override + public String getRunPath() { + return bean.getPath(); } }; list.add(miniApp); } - } catch (Exception e){ - System.err.println(e.getMessage()); - return list; + } catch (Exception e) { + // 异常则显示异常面板 + MiniApp miniApp = new MiniApp() { + @Override + public String getName() { + return "ProcessGroupApp"; + } + + @Override + public JPanel getPanel() { + JPanel panel = new JPanel(); + panel.setLayout(new BorderLayout()); + + JTextArea textArea = new JTextArea(); + textArea.setText(e.getMessage()); + textArea.setForeground(Color.RED); + System.out.println(e.getMessage()); + + JScrollPane scrollPane = new JScrollPane(textArea); + textArea.setRows(15); + + panel.add(scrollPane); + return panel; + } + + @Override + public boolean protect() { + return false; + } + }; + + list.add(miniApp); } return list; diff --git a/PLUGIN_BKPG_GROUP_PROCESS/src/main/java/top/dreamcenter/bkpg/group/bean/ProcessConfigBean.java b/PLUGIN_BKPG_GROUP_PROCESS/src/main/java/top/dreamcenter/bkpg/group/bean/ProcessConfigBean.java new file mode 100644 index 0000000..635bd86 --- /dev/null +++ b/PLUGIN_BKPG_GROUP_PROCESS/src/main/java/top/dreamcenter/bkpg/group/bean/ProcessConfigBean.java @@ -0,0 +1,58 @@ +package top.dreamcenter.bkpg.group.bean; + +import java.util.List; + +public class ProcessConfigBean { + + private List processBeanList; + + public List getProcessBeanList() { + return processBeanList; + } + + public void setProcessBeanList(List processBeanList) { + this.processBeanList = processBeanList; + } + + public static class ProcessBean{ + + /** + * 名称 + */ + private String name; + /** + * 指令 + */ + private String cmd; + + /** + * 路径 + */ + private String path; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCmd() { + return cmd; + } + + public void setCmd(String cmd) { + this.cmd = cmd; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + } + +} diff --git a/PLUGIN_BKPG_GROUP_PROCESS/src/main/java/top/dreamcenter/bkpg/group/util/YamlUtil.java b/PLUGIN_BKPG_GROUP_PROCESS/src/main/java/top/dreamcenter/bkpg/group/util/YamlUtil.java new file mode 100644 index 0000000..21e2651 --- /dev/null +++ b/PLUGIN_BKPG_GROUP_PROCESS/src/main/java/top/dreamcenter/bkpg/group/util/YamlUtil.java @@ -0,0 +1,22 @@ +package top.dreamcenter.bkpg.group.util; + +import org.yaml.snakeyaml.Yaml; +import org.yaml.snakeyaml.constructor.Constructor; +import top.dreamcenter.bkpg.group.bean.ProcessConfigBean; + +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; + +public class YamlUtil { + + public static ProcessConfigBean getProcessConfig(String path) throws IOException { + Yaml yaml = new Yaml(new Constructor(ProcessConfigBean.class)); + + try (InputStream in = new FileInputStream(path)) { + return yaml.load(in); + } + + } + +} diff --git a/README.md b/README.md index 3d518ca..68851d6 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,7 @@ MiniAppGroup ProcessAppTemplate: MiniApp - String getName(); // 获取应用名称 - String getCmdStr(); // 需要执行的命令 + - String getRunPath(); // 默认实现返回null,表示指令执行目录环境 - 其余基类函数已默认实现 @@ -87,13 +88,25 @@ protect() 是保护函数,如果返回true,则表示在BKPG进行RELOAD时 用于执行命令行指令,需要实现两个接口,一个是getName,作用同上,另外一个是该抽象类 独有的,getCmdStr,需要设置命令行的完整执行指令。当点击面板的执行按钮时, 会启动一个线程来执行该命令,并且每5s会检测一次命令心跳,如果心跳失去连接, -则会释放资源。可以作为一些应用或者服务的启动端。 +则会释放资源。 +如果说有的指令需要在特定目录下执行,可以覆盖getRunPath,来指定运行环境。 +可以作为一些应用或者服务的启动端。 为了更加高效的添加命令(常用), 官方内置了一个命令AppGroup: **PLUGIN_BKPG_GROUP_PROCESS** 。 -通过配置ext/ProgressGroup.txt来添加指令应用, -指令名称和指令用英文冒号和一个空格隔开【: 】,会自动创建多组ProcessAppTemplate。 +通过配置ext/ProgressGroup.yml来添加指令应用, +会自动创建多组ProcessAppTemplate。格式参考: +```yml +processBeanList: + - name: PING百度 + cmd: ping www.baidu.com + - name: PING主站 + cmd: ping www.dreamcenter.top + - name: nginx + cmd: D:\basic\nginx-1.24.0\nginx + path: D:\basic\nginx-1.24.0 +``` diff --git a/ext/ProgressGroup.txt b/ext/ProgressGroup.txt deleted file mode 100644 index a39b65a..0000000 --- a/ext/ProgressGroup.txt +++ /dev/null @@ -1,2 +0,0 @@ -PING百度: ping www.baidu.com -PING主站: ping www.dreamcenter.top \ No newline at end of file diff --git a/ext/ProgressGroup.yml b/ext/ProgressGroup.yml new file mode 100644 index 0000000..465f5c8 --- /dev/null +++ b/ext/ProgressGroup.yml @@ -0,0 +1,8 @@ +processBeanList: + - name: PING百度 + cmd: ping www.baidu.com + - name: PING主站 + cmd: ping www.dreamcenter.top + - name: nginx + cmd: D:\basic\nginx-1.24.0\nginx + path: D:\basic\nginx-1.24.0 \ No newline at end of file