基于Java的H2数据库无法在CLASSPATH中找到项目

时间:2014-10-27 03:26:17

标签: java scala classpath h2

我使用以下命令编译了scala文件:

scalac -cp ".:*" AcmeTrigger.scala

在包含.scala文件的目录中,我有一些.jar个文件,其中包含我正在使用的电子邮件和短信服务的API。没问题。

当有人修改数据库中的表时,scala文件实质上会发送文本消息和电子邮件。我使用以下命令启动数据库:

java -cp ".:*" -jar h2-1.4.182.jar

基本上告诉它使用目录中的.class.jar文件并将它们添加到类路径中。我做了很多这方面的变化。没有.class,使用"。:*"使用完全类型的名称。无论我做什么,H2都不认识这个课程。

因此,此数据库中的操作将数据库连接到类:

CREATE TRIGGER ALERT AFTER INSERT ON "event" FOR EACH ROW CALL "AcmeTrigger"

当我运行此操作时,我收到一条错误消息,指出它找不到类

Error creating or initializing trigger "ALERT" object, class "AcmeTrigger", cause: "org.h2.message.DbException: Class ""AcmeTrigger"" not found [90086-182]"

我不认为错误出现在查询语法中,而是我如何使用classpath,并希望有更多Java / Scala经验的人可以帮助我。我尝试了许多启动.jar文件的变体,但似乎没有任何帮助。

2 个答案:

答案 0 :(得分:1)

关于H2 jar的默认main方法,有些东西会导致奇怪的类加载器行为(需要进一步的研究来查明原因)。我和OP有完全相同的经验。

将已编译的类复制到您选择的目录(例如libs)以及H2 jar之后,像这样运行H2服务器:

java -cp "/libs:/libs/h2-1.4.197.jar" org.h2.tools.Server

这将导致触发器引用的类的正确解析。

答案 1 :(得分:0)

AFAIK您无法将单个.class文件添加到类路径中。试试java -cp ".:*.jar"(即使用此目录作为类路径上的条目,而不是单个.class文件)

另请注意scalac隐含地包括例如类路径上的scala库。确保您拥有相应的scala-library.jar