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 *爲具有該名稱的可執行文件。這是你可以做的。 –