Error: Could not find or load main class org.h2.tools.RunScript
Error: Could not find or load main class org.h2.tools.RunScript
enter code here
我将我的网络应用程序和 h2 数据库作为 docker 容器。我已经 docker 编写了 yml 文件。现在,我需要初始化这个数据库(h2database)。但我无法这样做。当我进入 h2database docker 容器时,我看到 docker-entrypoint-initdb.d/initdb.sh 在这个 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 时它给我错误:找不到或加载主 class org.h2.tools.RunScript
我已经尝试了所有可能的 class 路径组合,还下载了不同的 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/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" 。然后我怎么能把我桌面上的 h2-1.4.190.jar 文件放到数据库(db)容器内的那个位置。我想要的只是在docker撰写期间通过运行针对它的脚本来填充(初始化)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 "[=10=]")
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 "[=27=]")
将确保它是当前 运行 脚本的同一文件夹,而不是启动脚本的文件夹。
另外,h2-1.4.190.jar
可以使用绝对目录,也可以
enter code here
我将我的网络应用程序和 h2 数据库作为 docker 容器。我已经 docker 编写了 yml 文件。现在,我需要初始化这个数据库(h2database)。但我无法这样做。当我进入 h2database docker 容器时,我看到 docker-entrypoint-initdb.d/initdb.sh 在这个 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 时它给我错误:找不到或加载主 class org.h2.tools.RunScript
我已经尝试了所有可能的 class 路径组合,还下载了不同的 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/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" 。然后我怎么能把我桌面上的 h2-1.4.190.jar 文件放到数据库(db)容器内的那个位置。我想要的只是在docker撰写期间通过运行针对它的脚本来填充(初始化)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 "[=10=]")
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 "[=27=]")
将确保它是当前 运行 脚本的同一文件夹,而不是启动脚本的文件夹。
另外,h2-1.4.190.jar
可以使用绝对目录,也可以