Ich rufe eine ausführbare Datei nodeJS in meiner Kommandozeilen-Java-App auf. Da sich die ausführbare Datei an einem Speicherort in der Variablen $PATH
befindet, kann sie einfach als node
bezeichnet werden. Allerdings muss ich dann einen Parameter (die .JS-Datei zum Ausführen) zur Verfügung stellen, die, wenn ich als relativen Pfad zu der ausführbaren Datei node
bieten, NodeJS einen Fehler, dass es die JS-Datei nicht finden kann.
Also, was ich suche ist, um den absoluten Pfad der node
ausführbare Datei, die ausgeführt wird, und kompilieren dann den absoluten Pfad der JS-Datei Ich muss als Parameter der node
Befehl hinzufügen.
Gibt es einen Weg in Java, der plattformunabhängig ist? Ich realisiere, dass ich where node
ausführen kann, bekomme die Ausgabe und gehe von dort, aber ich würde nicht OS-spezifische Befehle hardcodieren wollen.
Hier ist mein Code so weit:
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());
Beachten Sie den Teil mit D:/SDKs/Appium/node_modules/appium/lib/server/main.js
? Ich muss das intelligent aufbauen, um die Hardcoding zu entfernen.
Die .js-Datei befindet sich im Verzeichnis nodeJS, nicht in meinem Java-Projektverzeichnis, von dem ich nicht weiß, wo es sich befindet. Deshalb muss ich den Speicherort der Knoten ausführbar machen. Daher kann ich die .js nicht einfach als Datei instantiieren. Wenn ich gewusst hätte, wo es ist, wäre es leicht gewesen. – evilpenguin
Ich sehe, Sie haben Ihre Antwort aktualisiert, aber Sie haben immer noch nicht den Punkt verstanden. Ich weiß nicht, wo die .js-Datei ist, ich weiß nur, wo es sich auf den ausführbaren Knoten 'node' bezieht. Ich kann es nicht in einem 'File' Objekt einfügen. – evilpenguin
Vielleicht hat die richtige Antwort mit * $ PATH * zu tun. Die Tools * which * und * where * scannen einfach den * $ PATH * für eine ausführbare Datei mit diesem Namen. Das könnte man auch tun. –