升级后 HSQLDB 命令行关闭不再起作用
Posted
技术标签:
【中文标题】升级后 HSQLDB 命令行关闭不再起作用【英文标题】:HSQLDB command line shutdown no longer works after upgrade 【发布时间】:2020-12-30 22:09:39 【问题描述】:在 Ubuntu 18.04 上,我能够使用以下单行程序在服务器模式下关闭正在运行的 HSQLDB 实例:
java -cp $CLASSPATH:/usr/share/java/hsqldbutil.jar:/usr/share/java/hsqldb.jar "org.hsqldb.cmdline.SqlTool" --inlineRc=url=jdbc:hsqldb:hsql://localhost/$DB_NAME,user=SA,password= --sql="SHUTDOWN;"
升级到 Ubuntu 20.04(使用 HSQLDB 2.4.1 和 HSQLDB Utils 2.5.0)后,失败并出现以下错误:
Error: Could not find or load main class org.hsqldb.cmdline.SqlTool
Caused by: java.lang.ClassNotFoundException: org.hsqldb.cmdline.SqlTool
确实,我在这两个 JAR 中的任何一个中都找不到 org.hsqldb.cmdline.SqlTool
,也没有任何关于此功能在何处消失的提示。
docs 提到了sqltool.jar
,但我在系统上的任何地方都找不到该文件。
SqlTool 类去哪儿了?或者我还能如何从 shell 脚本关闭正在运行的 HSQLDB 实例?
【问题讨论】:
【参考方案1】:没有官方发布的名为 hsqldbutil.jar 的 jar。该 jar 包含 GUI 客户端,有一个 Ant 和 Gradle 构建选项。
通过http://hsqldb.org的下载链接从SourceForge下载hsqldb zip包
压缩包的/lib目录包含hsqldb.jar和sqltool.jar。在您的 Java 命令中使用这些 jar。这也确保您使用的是来自同一发行版本的 jar,因为混合不同的发行版本将无法正常工作。
【讨论】:
这些是 Ubuntu 附带的 JAR,作为 libhsqldb-java 包的一部分。 hsqldb-utils 包有一个 shell 脚本来调用 sqltool;运行脚本会引发相同的错误。猜猜这意味着 Ubuntu 软件包已损坏……将在那里提交错误。 另请注意,直到并包括版本 2.5.1,sqltool.jar 依赖于 hsqldb.jar,并且不能单独运行。从下一个版本开始,sqltool.jar 将独立工作。 我已经在bugs.launchpad.net/ubuntu/+source/hsqldb/+bug/1909811提交了一份关于 Ubuntu 的错误报告【参考方案2】:只是为了稍微扩展一下 fredt 的答案,以下是我用来解决我的 21.10(顽皮)系统上的问题的实际步骤:
确定您的系统运行的是哪个版本(Impish 似乎发布了 v2.5.1;在下面用您的版本替换 2.5.1
):
apt policy libhsqldb-java
从SourceForge下载对应版本:https://sourceforge.net/projects/hsqldb/files/hsqldb/
将/hsqldb-2.5.1/hsqldb/lib/sqltool.jar
提取到/tmp
运行:
sudo -i
mv /tmp/sqltool.jar /usr/share/java/sqltool-2.5.1.jar
chown root: !$
vi $(type -p hsqldb-sqltool)
在CLASSPATH
的某处添加/usr/share/java/sqltool-2.5.1.jar:
并退出vi(如果您对vi 不满意,请使用nano
)
别忘了在 Launchpad 上为 user149408 的错误投票:https://bugs.launchpad.net/ubuntu/+source/hsqldb/+bug/1909811(在右上角登录;点击“此错误会影响 X 人。此错误会影响您吗?”链接左上方)。
【讨论】:
以上是关于升级后 HSQLDB 命令行关闭不再起作用的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2019:使用 vcvars64.bat 从命令行构建 C++ 不再起作用
`--disable-web-security` 命令似乎不再起作用