Ошибка: не удалось найти или загрузить основной класс при выполнении файла JAR - PullRequest
0 голосов
/ 27 октября 2019

Я создаю образ Docker для моего проекта Java Gradle. В моем файле Docker, как я пришел к пониманию. Выполнение dockerFile с использованием Gradle docker создает образ для моего файла docker, готового к выполнению. он также создает JAR-файл для выполнения моего проекта Gradle. Мой файл Docker выглядит следующим образом:

FROM openjdk:13-jdk-alpine

VOLUME /tmp

ARG JAR_FILE
COPY ${JAR_FILE} ./app.jar

CMD ["java","-jar","app.jar" , "Simulator.NewMain"]

и build.gradle выглядит следующим образом:

buildscript {
    dependencies {
        classpath group: 'de.dynamicfiles.projects.gradle.plugins', name: 'javafx-gradle-plugin', version: '8.8.2'
    }
    repositories {
        mavenLocal()
        mavenCentral()

    }
}
plugins {
    id 'com.palantir.docker' version '0.22.1'
     id 'java'
}


allprojects {apply plugin: 'idea'}
apply plugin: 'java'
apply plugin: 'application'
mainClassName =  'Simulator.NewMain'
repositories {
    mavenCentral()
    mavenLocal()
    jcenter()
    maven {  url "http://streamreasoning.org/maven" }
    maven {  url "http://service.hucompute.org/artifactory/libs-release" }
     maven {  url "https://raw.githubusercontent.com/alexeygrigorev/maven-repo/master/" }
}

docker {
        name "hi"
        dockerfile file('src/docker/Dockerfile')
        copySpec.from(jar).rename(".*","app.jar")
        buildArgs(['JAR_FILE' : "app.jar"])
}
jar {
    manifest {
        attributes(
                'Main-Class': 'Simulator.NewMain'

        )
          }
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    }




dependencies {
    //compile project(':shared')
    compile files('libs/mdsj.jar')
    // https://mvnrepository.com/artifact/org.apache.commons/commons-math3
    compile group: 'org.apache.commons', name: 'commons-math3', version: '3.0'
    // https://mvnrepository.com/artifact/org.ujmp/ujmp-core
    compile group: 'org.ujmp', name: 'ujmp-core', version: '0.3.0'
    // https://mvnrepository.com/artifact/com.datumbox/lpsolve
    compile group: 'com.datumbox', name: 'lpsolve', version: '5.5.2.0'
    // https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
    compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.1'
    // https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc
    compile group: 'org.xerial', name: 'sqlite-jdbc', version: '3.7.2'
    // https://mvnrepository.com/artifact/junit/junit
    testCompile group: 'junit', name: 'junit', version: '4.4'
    // https://mvnrepository.com/artifact/net.sourceforge/javaml
    compile group: 'net.sourceforge', name: 'javaml', version: '0.1.7'
    compile group: 'be.abeel', name: 'ajt', version: '2.9'



}

Мой Dockerfile создает файл JAR в образе моего докера, называемый app.jar. Затем я пытаюсь запустить этот файл JAR в образе. Однако каждый раз, когда я пытаюсь это сделать, я сталкиваюсь с этой ошибкой.

Error: Could not find or load main class NewMain.class
Caused by: java.lang.ClassNotFoundException: NewMain.class

результат успешного выполнения моих сборок Gradle docker, однако выполнение docker run DockerImage, где DockerImage - имя моего образа, приводит к указанной выше ошибке. Я попытался создать изображение jar из того же проекта и выполнить его, используя java -cp app.jar, но я все еще получаю ту же ошибку. Я также просмотрел классы jar-файла и нашел класс, который пытаюсь выполнить. класс NewMain - это простой класс println со следующим синтаксисом:

package Simulator;

public class NewMain {

    public static void main(String[] args) {

        System.out.println("hi");
    }
}

Кто-нибудь знает, как преодолеть ошибку classnotfound? или причина этого происходит? PS: Я подозревал, что причина может быть в моей версии JDK, поэтому я обновил до JDK13

...