web-dev-qa-db-ja.com

Linuxでクラスパスが機能しない

このコマンドがWindowsで正常に機能する理由は誰にもわかりますが、LinuxではClassNotFoundException game.ui.Mainが表示されます

Java -cp ".;lib/*" game.ui.Main -Xms64m -Xmx128m

私のフォルダ構造は次のようになります:lib /-Jars game /-クラスファイル

これは最新のJava 6。

58
sproketboy

クラスパスの構文はOSに依存します。 Wikipedia から:

ファイルシステムと密接に関連しているため、コマンドラインのクラスパス構文はオペレーティングシステムに依存します。例えば:

すべてのUnixライクなオペレーティングシステム(LinuxやMac OS Xなど)では、ディレクトリ構造はUnix構文を持ち、コロン( ":")で区切られた個別のファイルパスを持ちます。

windowsでは、ディレクトリ構造にはWindows構文があり、各ファイルパスはセミコロン( ";")で区切る必要があります。

マニフェストファイルでクラスパスが定義されている場合、オペレーティングシステムに関係なく、各ファイルパスをスペース( "")で区切る必要がある場合、これは適用されません。

102

セミコロンをコロンに変更してみてください。

CLASSPATH区切り文字はプラットフォームに依存し、 Java.io.File.pathSeparatorChar によって返される文字と同じです。

26
Mikel

Windows(つまりcygwin)とLinuxの両方のプラットフォームで実行することを意図したスクリプトでクラスパスを使用する場合、パスも重要です。これを行うとき、クラスパスにこのような関数を含めます。 「-w」オプションを指定した「cygpath」コマンドは、パスをWindowsスタイルのパスに変換します。したがって、この例では「/home/user/lib/this.jar」は「C:\ Cygwin\home\user\lib\this.jar」のようなものに変換されます

#!/bin/bash

function add_Java_classpath() {
  local LOCAL1=$1
  if [ "$OSTYPE" == cygwin ]; then
    LOCAL1="$(cygpath -C ANSI -w $LOCAL1)"
  fi
  if [ -z "$Java_CLASSPATH" ]; then
    Java_CLASSPATH="$LOCAL1"
  Elif [ "$OSTYPE" != cygwin ]; then
    Java_CLASSPATH="${Java_CLASSPATH}:$LOCAL1"
  else
    Java_CLASSPATH="${Java_CLASSPATH};$LOCAL1"
  fi      
}

add_Java_classpath /home/user/lib/this.jar
add_Java_classpath /usr/local/lib/that/that.jar

Java -cp "${Java_CLASSPATH}" package.Main $@
4
pinkston00

Windows:

Java -cp file.jar;dir/* my.app.ClassName

Linux:

Java -cp file.jar:dir/* my.app.ClassName

リマインド:

  • Windowsパス区切り文字は;
  • Linuxパス区切り文字は:
  • Windowsでは、cp引数に空白が含まれていない場合、引用符はオプションです
1
Wender