类path在Linux下不起作用

任何人都有一个想法,为什么这个命令在Windows中工作正常,但在Linux中,我得到一个ClassNotFoundException的game.ui.Main

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

我的文件夹结构如下所示:lib / – Jars游戏/ – Class文件

这是最新的Java 6。

类path语法是依赖于操作系统的。 维基百科 :

与文件系统紧密关联,命令行Classpath语法取决于操作系统。 例如:

在所有类Unix操作系统(如Linux和Mac OS X)上,目录结构具有Unix语法,单独的文件path以冒号(“:”)分隔。

在Windows上,目录结构具有Windows语法,并且每个文件path必须用分号(“;”)分隔。

这不适用于在清单文件中定义类path时,不pipe操作系统如何,每个文件path必须用空格(“”)分隔的情况。

尝试将分号更改为冒号。

CLASSPATH分隔符是平台相关的,与java.io.File.pathSeparatorChar返回的字符相同。

在两个平台上运行的脚本中使用类path时,path也很重要:Windows(即cygwin)和Linux。 当我这样做时,我为类path添加了一个像这样的函数。 带'-w'选项的'cygpath'命令将path转换为Windows风格的path。 所以在这个例子中“/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 $@ 

视窗:

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

Linux的:

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

提醒:

  • Windowspath分隔符是;
  • Linuxpath分隔符是:
  • 在Windows中,如果cp参数不包含空格,则引号是可选的