Classpath 在 Linux 下不起作用
- 2024-10-11 08:36:00
- admin 原创
- 74
问题描述:
有谁知道为什么这个命令在 Windows 上运行良好,但在 Linux 中却出现 ClassNotFoundException game.ui.Main
java -cp ".;lib/*" game.ui.Main -Xms64m -Xmx128m
我的文件夹结构如下:lib/-Jars game/-类文件
这是最新的 Java 6。
解决方案 1:
类路径语法与操作系统相关。摘自维基百科:
由于与文件系统密切相关,命令行 Classpath 语法取决于操作系统。例如:
在所有类 Unix 操作系统(例如 Linux 和 Mac OS X)上,目录结构都具有 Unix 语法,各个文件路径以冒号(“:”)分隔。
在Windows上,目录结构具有Windows语法,并且每个文件路径必须用分号(“;”)分隔。
当在清单文件中定义 Classpath 时,这不适用,其中每个文件路径都必须用空格(“ ”)分隔,无论操作系统是什么。
解决方案 2:
尝试将分号改为冒号。
CLASSPATH 分隔符与平台相关,并且与java.io.File.pathSeparatorChar返回的字符相同。
解决方案 3:
视窗:
java -cp file.jar;dir/* my.app.ClassName
Linux:
java -cp file.jar:dir/* my.app.ClassName
提醒:
Windows 路径分隔符是
;
Linux 路径分隔符是
:
在 Windows 中,如果 cp 参数不包含空格,则引号是可选的
解决方案 4:
当在脚本中使用要在两个平台上运行的类路径时,路径也很重要:Windows(即 cygwin)和 Linux。当我这样做时,我会为类路径包含一个这样的函数。带有“-w”选项的“cygpath”命令将路径转换为 Windows 样式的路径。因此,在此示例中,“/home/user/lib/this.jar”将转换为类似“C:Cygwinhome/userlibthis.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 $@
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件