私はコマンドラインJavaアプリケーションでnodeJS実行ファイルを呼び出しています。実行ファイルは$PATH
変数の場所にあるため、単にnode
と呼ぶことができます。しかし、私はnode
実行ファイルへの相対パスとして提供すると、nodeJSが.jsファイルを見つけることができないというエラーをスローするパラメータ(実行する.jsファイル)を提供する必要があります。
私が探しているのは、実行中のnode
実行ファイルの絶対パスを取得し、node
コマンドにパラメータとして追加する必要がある.jsファイルの絶対パスをコンパイルすることです。
プラットフォームに依存しないJavaでこれを行う方法はありますか?私はwhere node
を実行し、出力を取得してそこから行くことができるとわかりますが、OS特有のコマンドをハードコードしたくありません。
ここに私のコードは、これまでのところです:
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ファイルはJavaJプロジェクトディレクトリではなく、nodeJSディレクトリにあります。どこにあるのか分かりません。だから私はノードの実行可能ファイルの場所を取得する必要があります。したがって、私はファイルとして.jsをインスタンス化することはできません。もし私がそれがどこにあるのか分かっていたら、それは簡単だったでしょう。 – evilpenguin
私はあなたの答えを更新したが、あなたはまだポイントを得ていないと思う。私は.jsファイルがどこにあるのかわかりませんが、 'node'実行可能ファイルのどこに関連しているのか分かります。 'File'オブジェクトでインスタンス化することはできません。 – evilpenguin
正しい答えは* $ PATH *と関係しているかもしれません。 ツール* *と* *は、その名前の実行可能ファイルの* $ PATH *をスキャンするだけです。それもあなたができることです。 –