类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参数不包含空格,则引号是可选的