Classpath在linux下不起作用

时间:2010-12-24 21:39:57

标签: java linux classpath

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

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

我的文件夹结构如下所示: lib / - 罐子 游戏/ - 类文件

这是最新的Java 6。

4 个答案:

答案 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

<强>提醒:

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