2012-04-13 4 views
2

java -cp somejar.jar com.company.mainClassというコードがあります。私はプロセスビルダーを使用して呼び出しています。窓では、それは正常に動作します。 Linuxではエラーが発生する実行中のJavaプロセスから別のJavaプロセスを起動すると、OSに依存する動作が示されます。

メインクラスcom.company.mainClassを見つけることができませんでした。ここで

私のコードのサンプルです:

ArrayList<String> args = new ArrayList<String>(); 
args.add(java); 
args.add("-cp"); 
args.add("../dep/jetty-distribution-8.1.1.v20120215/lib/*;../build/jar/somejar.jar"); 
//args.add("../build/jar/LRM.jar"); 
args.add("com.company.mainClass"); 
ProcessBuilder processBuilder = new ProcessBuilder(args); 
Process process = processBuilder.start(); 

私はLinuxの対窓で異なる動作を取得される可能性がありますなぜいずれか知っていますか?

+0

コード内の相対パスに依存することは決してお勧めできません。それらのパスを完全に修飾し、テストを再試行する必要があります。 – Perception

答えて

2

linuxの下のクラスパス(-cp)の項目は、コロンで区切られていなければなりません:そしてセミコロン;によってウィンドウの下にあります。そして、ウィンドウのパスセパレータは、スラッシュの代わりにバックスラッシュです。 File.separatorでクラスパスを構築しますが、スラッシュも使用できます。

+0

ちょうどそれを書こうとしていたが、これが正しいことを確認したかった。コメントありがとう。 – morja

+0

ありがとうございます。それが問題を解決しました。 – user1332177

3

パスセパレータとしてセミコロンを使用していますが、unixではコロンです。

代わりにFile.pathSeparatorCharを使用してください。

+0

+1 File.pathSeparator。私はSystem.getProperty( "path.separator")を使用していましたが、これは同じですが便利ではありません。 – morja

関連する問題