1
我在命令行Java应用程序中调用nodeJS可执行文件。由于可执行文件位于$PATH
变量中的一个位置,因此可以简单地将其称为node
。但是,我必须提供一个参数(要运行的.js文件),如果我提供了作为node
可执行文件的相对路径的参数,那么nodeJS会抛出无法找到.js文件的错误。
因此,我正在寻找的是正在运行的node
可执行文件的绝对路径,然后编译.js文件的绝对路径,我必须将其作为参数添加到node
命令中。
有没有一种方法可以在Java平台不可知?我意识到我可以运行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());
通知与D:/SDKs/Appium/node_modules/appium/lib/server/main.js
的一部分吗?我需要以智能的方式构建它以消除硬编码。
.js文件位于nodeJS目录中,不在我的Java项目目录中,我不知道它在哪里。这就是为什么我需要获取节点可执行文件的位置。因此,我不能将.js作为一个文件实例化。如果我知道它在哪里,那将很容易。 – evilpenguin
我看到你已经更新了你的答案,但你还没有明白。我不知道.js文件的位置,我只知道它与“node”可执行位置相关的位置。我不能在'File'对象中实例化它。 – evilpenguin
也许正确答案与* $ PATH *有关。 工具* *和*其中*只是扫描* $ PATH *为具有该名称的可执行文件。这是你可以做的。 –