2016-07-29 9 views
1

私はコマンドライン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との部分は?私はハードコーディングを削除するためにインテリジェントな方法でそれを構築する必要があります。

答えて

1

自分で$ PATHをスキャンする必要があります。 はここ(githubの上でホストされている)demo

キーポイントがあるのです。

System.getenv("PATH") 
     .split(System.getProperty("path.separator")) 

残りは各パスオーバーと「ノード」と呼ばれるファイルを検索するために簡単です。

+0

.jsファイルはJavaJプロジェクトディレクトリではなく、nodeJSディレクトリにあります。どこにあるのか分かりません。だから私はノードの実行可能ファイルの場所を取得する必要があります。したがって、私はファイルとして.jsをインスタンス化することはできません。もし私がそれがどこにあるのか分かっていたら、それは簡単だったでしょう。 – evilpenguin

+0

私はあなたの答えを更新したが、あなたはまだポイントを得ていないと思う。私は.jsファイルがどこにあるのかわかりませんが、 'node'実行可能ファイルのどこに関連しているのか分かります。 'File'オブジェクトでインスタンス化することはできません。 – evilpenguin

+0

正しい答えは* $ PATH *と関係しているかもしれません。 ツール* *と* *は、その名前の実行可能ファイルの* $ PATH *をスキャンするだけです。それもあなたができることです。 –

関連する問題