当前位置: 首页 > 知识库问答 >
问题:

错误:找不到或加载主类org.h2.tools.runscript

琴光亮
2023-03-14

在这里输入代码我有webapplication和h2database作为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"
Error: Could not find or load main class org.h2.tools.RunScript
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:

现在,当我运行docker-compose命令时将创建initdb,因此我需要进入数据库(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数据库。拜托,我是docker新手,所以帮帮我

共有1个答案

柴英锐
2023-03-14

此错误表示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中查找jar。例如。如果Workdir/root/,那么它将尝试在/root中查找h2-1.4.190.jar,而不是在存储脚本的文件夹中,因此您无法找到JAR。

#!/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”)将确保它是当前运行脚本的同一个文件夹,而不是启动脚本的文件夹。

另外,您可以将绝对dir用于h2-1.4.190.jar,这也是可以的。

 类似资料:
  • 问题内容: 我在编译和运行Java代码时遇到了麻烦,该代码旨在允许我将Java与模拟建模包Vensim的共享对象接口。 以下代码编译没有错误: 但是,当我尝试运行以下命令时: 我收到以下错误:“错误:找不到或加载主类SpatialModel”。我的SpatialModel.java代码确实包含一个“主要”方法(如下),所以我不确定是什么问题- 有人可以帮我吗?谢谢。 问题答案: 您必须确保将文件的

  • 我一直在搜索这一点,但没有任何帮助,我试图运行的主要类,但不断得到一个错误。我负责这个 我的主文件位于中 我尝试了多个命令,但一无所获。 我想运行位于中的主类,但总是出现此错误,请提供帮助吗?

  • 我有一个名为TestInventory.java的类,其他类在默认包中,都在src文件夹中。然而,当我运行它时,我得到: 错误:找不到或加载主类

  • 问题内容: 我试图将HelloWorld放在.jar文件中并运行它,但是它不起作用。我创建了Java文件并在程序中键入内容,然后用cmd编写: 而且有效。然后我进入 得到了输出 然后我进入 第一行有效,而第二行却给我一个错误: 当我尝试使用64位jre7 \ bin,jdk1.7.0_51 \ bin,jdk1.7.0_51 \ jre \ bin中的java.exe文件打开它时,我得到的输出是(

  • 问题内容: 我通过cmd.exe在Windows 7上使用Java SDK 1.7。直到几个小时前,一切突然都无法正常运行,突然之间我无法运行编译的类文件,标题中始终显示错误。 我似乎能够编译My.java文件,但是无法运行生成的类文件(My.class)。我经常收到错误“错误:找不到或加载主类My.class”。我已经尝试了多个其他类文件,都导致了相同的问题。 如果您想知道,我的“路径”环境变量

  • 问题内容: 我在编译和运行Java代码时遇到麻烦,目的是允许我将Java与模拟建模包Vensim的共享对象接口。 以下代码编译没有错误: 但是,当我尝试运行以下命令时: 我收到以下错误:“错误:找不到或加载主类SpatialModel”。我的SpatialModel.java代码确实包含一个“主要”方法(如下),所以我不确定是什么问题-有人可以帮我吗?谢谢。 问题答案: 你必须确保将文件的位置添加