我在命令行Java app中调用了nodeJS可执行文件。由于可执行文件位于$PATH
变量中的某个位置,因此只需将其称为node
即可。但是,我必须提供一个参数(要运行的.js文件),如果我提供node
可执行文件的相对路径,nodeJS会抛出一个无法找到.js文件的错误。
所以,我正在寻找的是获取正在运行的node
可执行文件的绝对路径,然后编译.js文件的绝对路径,我必须将其作为参数添加到{ {1}}命令。
在Java中有没有办法与平台无关?我意识到我可以运行node
,获取输出并从那里开始,但我不想硬编码特定于操作系统的命令。
到目前为止,这是我的代码:
where node
注意CommandLine cmdLine = new CommandLine("node");
cmdLine.addArgument("D:/SDKs/Appium/node_modules/appium/lib/server/main.js");
cmdLine.addArgument("--address");
cmdLine.addArgument("0.0.0.0");
cmdLine.addArgument("--port");
cmdLine.addArgument("4444");
cmdLine.addArgument("--app");
File app = new File("some.apk");
cmdLine.addArgument(app.getAbsolutePath());
cmdLine.addArgument("--app-pkg");
cmdLine.addArgument("some.stuff.does.not.matter");
cmdLine.addArgument("--pre-launch");
cmdLine.addArgument("--automation-name");
cmdLine.addArgument("Appium");
System.out.println(cmdLine.toString());
DefaultExecutor executor = new DefaultExecutor();
ExecuteWatchdog watchdog = new ExecuteWatchdog(60000);
executor.setWatchdog(watchdog);
try {
int exitValue = executor.execute(cmdLine);
} catch (IOException e) {
System.err.println("Error starting Appium: " + e.getMessage());
的部分?我需要以智能方式构建它以删除硬编码。
答案 0 :(得分:1)
您必须自己扫描$ PATH。 这是demo(托管在github上)
关键点是:
System.getenv("PATH")
.split(System.getProperty("path.separator"))
其余部分对于每条路径都很简单,并且搜索名为" node"的文件。