2014-10-27 76 views
0

我有一個Scala的文件已編制使用下面的命令:基於Java的H2數據庫無法找到項目在CLASSPATH

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]"

我不認爲錯誤是在查詢語法中,但與我如何使用類路徑,並希望有更多的Java/Scala的人經驗可以幫助我。我已經嘗試了許多啓動.jar文件的變體,但似乎沒有任何幫助。

+0

你的jar是運行H2本身,還是通過JDBC或其他方式連接到另一個進程? – 2014-10-27 03:55:36

+0

@ChrisMartin .jar包含一個類「AcmeTrigger」,它擴展了org.h2.api.Trigger。根據H2文檔,你可以指出每次運行我上面發佈的SQL語句時都應該調用這個文件。 SQL語句返回在類路徑中找不到該類。 – AmericanKryptonite 2014-10-27 04:00:59

+0

可能重複[無法在H2 DB中調用觸發器](http://stackoverflow.com/questions/14124099/cannot-call-trigger-in-h2-db) – 2014-10-27 04:12:39

回答

0

AFAIK您不能將單個.class文件添加到類路徑中。嘗試java -cp ".:*.jar"(即使用這個目錄作爲在classpath中的條目,而不是個別.class文件)

還要注意的是scalac隱含包括例如classpath上的scala庫。確保你有合適的scala-library.jar

+0

嘗試了不同的變體以及添加scala-library.jar。 – AmericanKryptonite 2014-10-27 16:07:03