2

我有两个 Java 类在本地系统上运行命令。我的开发系统是 Mac,我的 QA 系统是 Windows,Prod 系统是 UNIX。因此,每个命令都有不同的命令,目前我必须进入并注释/取消注释差异。这两个类的结构与可执行文件和命令相同。这就是我所拥有的。

// Linux (QA/Prod)
final String executable = "/user1/Project/Manufacturer/CommandCLI";
// final String executable = "cat"; // Mac Dev
//  final String executable = "cmd"; // Windows QA

final String command = "getarray model=" + model + " serialnum=" + serialnum;
// Windows QA(local laptop)
//final String command = "/C c:/Manufacturer/CommandCLI.bat getarray model=" + model + " serialnum=" + serialnum;
//Mac Dev
// final String command = "/TestData/" + computer.getId() + ".xml" 

因此,如您所见——我根据环境进行评论和取消评论。我主要担心的一个问题是我依赖于模型和序列号变量——我不知道它是否可以以某种方式插入到属性中(模型和序列号在方法调用中给出)。

我们正在使用 Maven,因此在“mvn clean package”期间,我们添加了 -P 标志来指定属性文件。

处理这个问题的优雅方法是什么?

4

1 回答 1

2

我建议创建 3 种不同的方法:一种用于包含操作系统特定命令的每个操作系统。您可以使用系统属性确定当前操作系统:检查这个问题。并根据该属性调用适当的方法。例子:

private runOnLinux(int model, int serialNum) { ... }
private runOnWindows(int model, int serialNum) { ... }
private runOnMac(int model, int serialNum) { ... }

// Somewhere in source code...
String os = System.getProperty("os.name").toLowerCase();
if (os.contains("windows")) {
    runOnWindows(model, serialNum);
} else if (os.contains("linux") || os.contains("unix")) {
    runOnLinux(model, serialNum);
} else {
    // Mac!
    runOnMac(model, serialNum);
}

当然,我不确定所有这些检查是否正确。更好地检查我在开头提到的问题的答案。它包含更多有用的信息。

于 2013-06-17T13:02:56.270 回答