繁体   English   中英

在命令行启动 H2 数据库服务器时,用户定义的类在 CLASSPATH 中可用

[英]User defined class available in CLASSPATH when starting H2 Database Server at command line

我从命令行启动 H2 服务器工具:

java -cp h2*.jar org.h2.tools.Server

我想使用一个用户定义的类一样Function的显示一个用户自定义函数和存储过程章节。

我用我的用户功能做了几次尝试:

  • 将其编译为Function.class文件
  • 将其编译为acme/Function.class文件
  • 将其打包在acme.jar文件中
  • 将其打包在h2acme.jar文件中

并尝试了多种方法将它包含到类路径中,但没有成功。
例如:

[user@host h2]$ java -cp ./h2*.jar:./acme.jar org.h2.tools.Server -tcp -web
Error: Could not find or load main class org.h2.tools.Server

我已阅读此相关问题并遵循那里的指示。
但它似乎不起作用。

我能够完成这项工作的唯一方法是使用我的用户定义类更新h2*.jar文件:

[user@host h2]$ jar uf h2-1.4.197.jar acme/Function.class 
[user@host h2]$ jar tvf h2-1.4.197.jar | grep acme
   421 Wed Sep 26 12:17:16 EEST 2018 acme/Function.class

然后从 H2 Shell:

[user@host h2]$ java -cp h2*.jar org.h2.tools.Shell -user sa -password sa -url jdbc:h2:tcp://localhost/~/mydb
Welcome to H2 Shell 1.4.197 (2018-03-18)
...
sql> CREATE ALIAS IS_PRIME FOR "acme.Function.isPrime";
(Update count: 0, 9 ms)
sql> CALL IS_PRIME(5);
PUBLIC.IS_PRIME(5)
TRUE
(1 row, 31 ms)

虽然我确实想将我的用户定义函数保存在一个单独的 jar 中。
如果有人知道如何做,将不胜感激。

我让 H2 服务器在用户定义的函数中使用我的 Java 和 Kotlin 函数。 有几个步骤必须正确完成才能使其工作。

首先,是用你的函数构建 jar(我有 Java 和 Kotlin 函数)。 在 H2 发出几条错误消息后,当它尝试编译和运行我的函数时,我意识到仅包含我项目的标准 jar 是不够的。 我必须包含它的所有依赖项。 幸运的是,Gradle 和 Maven 可以制作这种胖罐。 我使用maven-assembly-plugin来制作我的。

其次,我告诉 H2 在我的本地 Maven 存储库中在哪里可以找到 H2 jar 和我的胖 jar。

H2_JAR=/Users/me/.m2/repository/com/h2database/h2/1.4.200/h2-1.4.200.jar
MY_JAR=/Users/me/.m2/repository/my/foo/app/1.0-SNAPSHOT/myfooapp-1.0-SNAPSHOT-jar-with-dependencies.jar

java -cp "$H2_JAR:$MY_JAR" org.h2.tools.Server -tcpPort 27777 -tcp

仅供参考:如果您希望 H2 调用 Kotlin 函数,那么 Kotlin 标准库必须位于 fat jar 中。 maven-assembly-plugin将包含它。)。 此外,您的 Kotlin 函数将需要位于companion object 我还在那个 Kotlin 函数中添加了@JvmStatic注释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM