首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:无法找到或加载主类org.h2.tools.RunScript

错误:无法找到或加载主类org.h2.tools.RunScript
EN

Stack Overflow用户
提问于 2019-06-27 22:10:40
回答 1查看 3.1K关注 0票数 2

enter code here我有我的and应用程序和h2database作为docker容器。我已经把docker compose yml文件设置好了。现在,我需要初始化这个数据库( h2database)。但我不能这样做。当我进入h2database docker容器时,我在这个initdb.sh中看到了docker-entrypoint-initdb.d/initdb.sh我已经添加了我的脚本

代码语言:javascript
复制
#!/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压缩文件夹,还检查了h2srcmainorgh2Tools下的RunScript文件及其在那里。所以我不明白这里的问题是什么。

代码语言:javascript
复制
Error: Could not find or load main class org.h2.tools.RunScript

我的Docker-compose.yml文件:

代码语言:javascript
复制
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:

现在,当我运行/App1/BasePl/sql-scripts/h2/common-scripts/BasePl-schema-h2.sql -compose命令时,将创建initdb,因此我需要进入数据库(Db)容器中的initdb.sh位置,然后将我的脚本#!/bin/bash java -cp h2-1.4.190.jar org.h2.tools.RunScript \ -script jdbc\ -url "jdbc:h2:http://localhost/code1/Demo2./BasePl“。那么我如何将我桌面上的h2-1.4.190.jar文件放到数据库(Db)容器中的那个位置。我想要的就是在docker compose期间通过运行一个脚本来填充(初始化) docker数据库。我是码头新手所以请帮帮我

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-28 10:07:49

这个错误意味着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旁边添加

代码语言:javascript
复制
#!/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使用绝对目录,这也是可以的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56792957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档