我使用以下命令编译了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文件的变体,但似乎没有任何帮助。
答案 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
。