gpt4 book ai didi

database - 错误 : Could not find or load main class org. h2.tools.RunScript

转载 作者:行者123 更新时间:2023-12-05 05:10:16 28 4
gpt4 key购买 nike

在此处输入代码我将我的 web 应用程序和 h2 数据库作为 docker 容器。我已经设置好了 docker compose yml 文件。现在,我需要初始化这个数据库(h2database)。但我无法这样做。当我进入 h2database docker 容器时,我在这个 initdb.sh 中看到 docker-entrypoint-initdb.d/initdb.sh 我已经添加了我的脚本

#!/bin/bash
java -cp h2-1.4.190.jar org.h2.tools.RunScript \
-script /App1/BasePl/sql-scripts/h2/common-scripts/BasePl-schema-h2.sql \ -url "jdbc:h2:http://localhost/code1/Demo2./BasePl"

但是当我尝试使用 bash 命令执行这个 initdb.sh 时它给我错误:无法找到或加载主类 org.h2.tools.RunScript

我已经尝试了所有可能的类路径组合,还下载了不同的 h2 jarfiles zip 文件夹,还检查了 h2\src\main\org\h2\tools 下的 RunScript 文件及其所在位置。所以我不明白这里的问题是什么。

Error: Could not find or load main class org.h2.tools.RunScript

我的 Docker-compose.yml 文件:

version: '3'
services:
baseplapplication:
build:
context: .
dockerfile: Dockerfile
environment:
BASEPL_HOME: "/usr/local/BASEPL"

ports:
- "882:8080"
volumes:
- basepl_data:/var/bio
depends_on:
- db
links:
- db
db:
image: "buildo/h2database"

volumes:
- ./dumps/init.sh:/docker-entrypoint-initdb.d/initdb.sh
- h2data:/var/lib/h2database

ports:
- "8082:8082"
volumes:
basepl_data:
h2data:

现在 initdb 将在我运行 docker-compose 命令时创建,因此我需要进入数据库 (db) 容器到 initdb.sh 的位置,然后将我的脚本 #!/bin/bashjava -cp h2-1.4.190.jar org.h2.tools.RunScript\ -script/App1/BasePl/sql-scripts/h2/common-scripts/BasePl-schema-h2.sql\-url "jdbc:h2: http://localhost/code1/Demo2./BasePl "。然后我怎么能把我桌面上的 h2-1.4.190.jar 文件放到数据库(db)容器内的那个位置。我想要的只是通过在 docker compose 期间针对它运行脚本来填充(初始化)docker 数据库。请帮助我,我是 docker 的新手

最佳答案

这个错误意味着java没有找到h2-1.4.190.jar

首先,需要将h2-1.4.190.jar放在initdb.sh的同一文件夹下,即docker-entrypoint-initdb。 d 在你的情况下。然后,在你的 Dockerfile 中,我猜 WORKDIR 不是 docker-entrypoint-initdb.d

然后,当执行java -cp h2-1.4.190.jar时,它打算在WORKDIR中找到jar,而不是在docker-entrypoint- initdb.d。例如。如果 WORKDIR/root/,那么它将尝试在 /root 中找到 h2-1.4.190.jar >,不在存放脚本的文件夹中,所以你找不到jar。

为了克服这个问题,您可以更改 dockerfile 中的 WORKDIR,或者只在 init.db.sh 旁边添加:

#!/bin/bash
dir=$(dirname "$0")
java -cp "$dir/h2-1.4.190.jar" org.h2.tools.RunScript \
-script /App1/BasePl/sql-scripts/h2/common-scripts/BasePl-schema-h2.sql \ -url "jdbc:h2:http://localhost/code1/Demo2./BasePl"

dir=$(dirname "$0") 将确保它是当前运行脚本的同一文件夹,而不是启动脚本的文件夹。

另外,h2-1.4.190.jar可以使用绝对目录,也可以。

关于database - 错误 : Could not find or load main class org. h2.tools.RunScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56792957/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com