任何人都知道为什么这个命令在Windows中正常工作但在Linux中我得到一个ClassNotFoundException game.ui.Main
java -cp ".;lib/*" game.ui.Main -Xms64m -Xmx128m
我的文件夹结构如下所示: lib / - 罐子 游戏/ - 类文件
这是最新的Java 6。
答案 0 :(得分:101)
类路径语法与操作系统有关。来自Wikipedia:
与文件密切相关 系统,命令行Classpath 语法取决于操作 系统。例如:
在所有类Unix操作系统上 (如Linux和Mac OS X),. 目录结构有一个Unix语法, 单独的文件路径分隔 冒号(“:”)。
Windows上的目录结构 具有Windows语法和每个文件 路径必须用分号分隔 ( “;”)。
这在Classpath中不适用 在清单文件中定义,其中 每个文件路径必须用a分隔 空间(“”),无论如何 操作系统。
答案 1 :(得分:26)
尝试将分号更改为冒号。
CLASSPATH分隔符取决于平台,与java.io.File.pathSeparatorChar返回的字符相同。
答案 2 :(得分:4)
在脚本中使用类路径时,路径也很重要,这些脚本要在两个平台上运行:Windows(即cygwin)和Linux。当我这样做时,我为类路径包含这样的函数。 ' cygpath'使用' -w'命令选项将路径转换为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 $@
答案 3 :(得分:1)
<强>窗:强>
java -cp file.jar;dir/* my.app.ClassName
<强> Linux的:强>
java -cp file.jar:dir/* my.app.ClassName
<强>提醒:强>
;
: