gpt4 book ai didi

java - 另一个不寻常的java ClassNotFound

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:00:22 25 4
gpt4 key购买 nike

我有一个小程序和几个 .sh 文件来执行它。我使用 Raspberry-pi 虚拟盒子模拟器来运行它。 (不要问为什么......只是需要它.. :))所以,我的 .sh 文件看起来像:

export HSQLDB_JAR=../lib/hsqldb-2.2.8.jar

java -classpath $HSQLDB_JAR org.hsqldb.Server -database.0 ../my-hsqldb/my-hsqldb -dbname.0 my-hsqldb

我有所需的 jars,java 安装正确(检查了几次),等等,都一样:

rpi@RaspberryPi:/home/snb/my/apps/MyApp/bin$ sh skysql.sh
: not found2:
Exception in thread "main" java.lang.NoClassDefFoundError: org/hsqldb/Server
Caused by: java.lang.ClassNotFoundException: org.hsqldb.Server

最有趣的是,当我直接从 bash 运行 sh 文件中的脚本时 - 它有效!但是运行 .sh 文件会出现此错误:(

非常感谢任何帮助。

编辑

以下目录具有所有访问规则,因此不会发生安全问题。它们都是可访问的。

编辑 #2

我已经使用了提供的答案和评论,结果就是这样:

  1. 还是一样的东西:(

  2. 我的 .sh 文件:

    #!/bin/bash

    export HSQLDB_JAR="$(pwd)/hsqldb-2.2.8.jar"

    echo $HSQLDB_JAR

    java -classpath $HSQLDB_JAR org.hsqldb.Server -database.0 ../my-hsqldb/my-hsqldb -dbname.0 my-hsqldb

终端输出为:

rpi@RaspberryPi:/home/snb/my/apps/MyApp/bin$ sh skysql.sh
: not found2:
: not found4:
/home/snb/my/apps/MyApp/lib/hsqldb-2.2.8.jar
: not found6:
Exception in thread "main" java.lang.NoClassDefFoundError: org/hsqldb/Server
Caused by: java.lang.ClassNotFoundException: org.hsqldb.Server
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: org.hsqldb.Server. Program will exit.
: not found8:

因此,如您所见,实际上找到了 .jar,并且它位于正确的路径中。

最佳答案

这可能是您未显示的脚本部分中的错误。试试这个:

  1. 确保脚本的第一行显示为 #!/bin/bash

  2. 确保您位于您认为所在的文件夹中。添加

    if [ ! -e "$HSQLDB_JAR" ]; then echo "Jar not found!" ; exit 1 ; fi

    在调用 java 之前

  3. 要查看 shell 实际执行的内容,请使用 -x (将 -x 作为参数添加到第一行或使用命令 set -x 激活它)。

如果您需要生成相对于您的脚本的路径,请使用此代码:

BASE=$( cd $( dirname "$0" ) > /dev/null && pwd )
HSQLDB_JAR="$BASE/../lib/hsqldb-2.2.8.jar"

始终引用包含路径的变量,以确保空格正常工作。

关于java - 另一个不寻常的java ClassNotFound,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13967942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com