O Classpath não funciona no linux

Alguém tem uma idéia do porque este comando funciona bem no Windows, mas no Linux eu recebo um game.ui.Main de ClassNotFoundException

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

minha estrutura de pastas se parece com isso: lib / – Jars game / – arquivos de class

Este é o mais recente Java 6.

A syntax do caminho de class é dependente do sistema operacional. Da Wikipedia :

Estando intimamente associado ao sistema de arquivos, a syntax Classpath da linha de comando depende do sistema operacional. Por exemplo:

em todos os sistemas operacionais semelhantes ao Unix (como Linux e Mac OS X), a estrutura de diretórios possui uma syntax Unix, com caminhos de arquivos separados separados por dois pontos (“:”).

no Windows, a estrutura de diretórios possui uma syntax do Windows e cada caminho de arquivo deve ser separado por um ponto-e-vírgula (“;”).

Isso não se aplica quando o caminho de class é definido em arquivos de manifesto, onde cada caminho de arquivo deve ser separado por um espaço (“”), independentemente do sistema operacional.

Tente alterar o ponto e vírgula para dois pontos.

O separador CLASSPATH é dependente da plataforma e é o mesmo que o caractere retornado por java.io.File.pathSeparatorChar .

Os caminhos também são importantes quando se usam caminhos de class em scripts destinados a serem executados em ambas as plataformas: Windows (por exemplo, cygwin) e Linux. Quando faço isso, incluo uma function como essa para o caminho de class. O comando ‘cygpath’ com a opção ‘-w’ converte caminhos em caminhos no estilo do Windows. Portanto, neste exemplo “/home/user/lib/this.jar” seria convertido em algo como “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 $@ 

Janelas:

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

Linux:

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

Lembrar:

  • Separador de caminho do Windows é ;
  • O separador de caminho do Linux é :
  • No Windows, se o argumento cp não contiver espaços em branco, as cotações serão opcionais