2017-11-02 2 views
1

PHPスクリプト内から小さなJavaクラスを実行しようとしています。 Linux上で期待どおりに動作しますが、同じスクリプトをWindows上で実行されたとき、私は受け取る:PHPで実行するとJavaがクラスを見つけることができず、CLIで同じコマンドが実行される

見つけるか、メインクラスをロードできませんでしたJDBCProxyを

ここでは、関連するPHPです:

$classpath = join(PATH_SEPARATOR, array(
    dirname(__FILE__).DIRECTORY_SEPARATOR.'JDBCProxy', 
    dirname(__FILE__).DIRECTORY_SEPARATOR.'JDBCProxy'.DIRECTORY_SEPARATOR.'libs'.DIRECTORY_SEPARATOR.'json-simple-1.1.1.jar', 
)); 

$cmd = sprintf("java -cp '%s' JDBCProxy", $classpath); 

... 

$process = proc_open($cmd, $descriptorspec, $pipes); 

sprintfの出力は

java -cp 'C:\worker\lib\DB\JDBCProxy;C:\worker\lib\DB\JDBCProxy\libs\json-simple-1.1.1.jar' JDBCProxy 

コマンドラインから直接実行すると、期待どおりに動作します。 PHPのコンテキストから実行すると、Javaがクラスを見つけることができないのはなぜですか?

答えて

1

Windowsの場合、単一のもの(')の代わりに二重引用符(")を使用してください。

Javaの場合はIncluding all the jars in a directory within the Java classpath、Windowsの場合はシングル引用符の扱いについてはthis answerを参照してください。

+0

ワウ。ありがとう、友よ。これはコマンドプロンプトで一重引用符で動作するようになると、もっと混乱するようになりましたが、PHPの文脈では二重引用符で囲みます。 –

関連する問題