类路径在linux下不起作用

发布于 2024-10-08 19:26:37 字数 225 浏览 4 评论 0原文

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

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

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

这是最新的 Java 6。

Anyone have an idea why this command works fine in Windows but in Linux I get a ClassNotFoundException game.ui.Main

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

my folder structure looks like this:
lib/ - Jars
game/ - Class files

This is the latest Java 6.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

把梦留给海 2024-10-15 19:26:37

类路径语法取决于操作系统。来自维基百科

与文件密切相关
系统,命令行类路径
语法取决于操作
系统。例如:

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

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

当类路径
在清单文件中定义,其中
每个文件路径必须用一个分隔
空格 (" "),无论
操作系统。

The classpath syntax is OS-dependent. From Wikipedia :

Being closely associated with the file
system, the command-line Classpath
syntax depends on the operating
system. For example:

on all Unix-like operating systems
(such as Linux and Mac OS X), the
directory structure has a Unix syntax,
with separate file paths separated by
a colon (":").

on Windows, the directory structure
has a Windows syntax, and each file
path must be separated by a semicolon
(";").

This does not apply when the Classpath
is defined in manifest files, where
each file path must be separated by a
space (" "), regardless of the
operating system.

不即不离 2024-10-15 19:26:37

尝试将分号更改为冒号。

CLASSPATH 分隔符与平台相关,与 java.io.File.pathSeparatorChar

Try changing the semi-colon to a colon.

The CLASSPATH separator is platform dependent, and is the same as the character returned by java.io.File.pathSeparatorChar.

踏月而来 2024-10-15 19:26:37

Windows:

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

Linux:

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

提醒:

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

Windows:

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

Linux:

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

Remind:

  • Windows path separator is ;
  • Linux path separator is :
  • In Windows if cp argument does not contains white space, the quotes is optional
柒七 2024-10-15 19:26:37

当在要在 Windows(即 cygwin)和 Linux 两个平台上运行的脚本中使用类路径时,路径也很重要。当我这样做时,我在类路径中包含一个这样的函数。带有“-w”选项的“cygpath”命令将路径转换为 ​​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 $@

Paths are important too when using classpaths in scripts meant to be run on both platforms: Windows (i.e. cygwin) and Linux. When I do this I include a function like this for the classpath. The 'cygpath' command with the '-w' option converts paths to Windows-style paths. So in this example "/home/user/lib/this.jar" would be converted to something like "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 $@
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文