Hauptklasse kann nicht gefunden werden gradle build

Moman2022

Neues Mitglied
ich versuche eine fatjar zu erstellen, er erstellt die fatjar aber beim starten der jar mit der console kommt die fehlermeldung Fehler: Hauptklasse DriveApi.Ober konnte nicht gefunden oder geladen werden


das ist meine build.gradle Datei

apply plugin: 'java'
apply plugin: 'application'

mainClassName = 'Ober'
sourceCompatibility = 1.8
targetCompatibility = 1.8
version = '1.0'

repositories {
mavenCentral()
}

dependencies {
implementation 'com.google.api-client:google-api-client:2.0.0'
implementation 'com.google.oauth-client:google-oauth-client-jetty:1.34.1'
implementation 'com.google.apis:google-api-services-sheets:v4-rev20220927-2.0.0'
implementation group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
implementation group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25'
implementation 'com.google.apis:google-api-services-drive:v3-rev20220815-2.0.0'
implementation 'com.google.api-ads:google-ads:22.0.0'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
implementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
implementation 'javax.mail:javax.mail-api:1.6.2'

}

task customFatJar(type: Jar) {
manifest {
attributes 'Main-Class': 'DriveApi.Ober'
}
archiveBaseName = rootProject.name + "-base"
archiveVersion = rootProject.version
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}




die klasse Ober befindet sich im eclipse C:\Users\meinBenutzername\eclipse-workspace\DriveApi\lib\src\main\java\DriveApi

habe ich vll fehler im code der gradle build datei ?
 
Also da wäre erst einmal die Frage, wie das so überhaupt funktionieren kann. Du nimmst ja bei dem bauen der jat jar auch die Signaturen mit und so - daher hätte ich erst einmal erwartet, dass Du einen Fehler bekommst, weil die Signatur falsch ist. Also etwas wie:
Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes

Die Frage ist auch, wie Du das Projekt baust - hast Du das customFatJar ziel auch aufgerufen, so dass Du ein fast jar bekomen hast entsprechend deiner Konfiguration? Sprich ein ./gradlew customFatJar hast Du ausgeführt?

Mit dem angepassten Task zu
Code:
task customFatJar(type: Jar) {
    manifest {
        attributes 'Main-Class': 'DriveApi.Ober'
    }
    archiveBaseName = rootProject.name + "-base"
    archiveVersion = rootProject.version
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
    from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } {
        exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA'
    }
    with jar
}

funktioniert es bei mir zumindest.
 
wow mit deinem task funktioniert es! was hast du genau gemacht ? was bedeutet das exclude....

ich arbeite in windows 10

wenn ich im DriveApi Ordner die console öffne und gradle customFatJar eingebe

kommen am anfang folgende Fehler:
Starting a Gradle Daemon, 3 incompatible and 1 stopped Daemons could not be reused, use --status for details

was haben diese zu bedeuten ?

meine jar läuft jetzt zwar, aber ich möchte das auch verstehen warum
 
Also erst einmal vermute ich (auf Grund Deiner Fehlermeldung), dass Du das fat jar nicht neu gebaut hattest - daher war das vermutlich ein alter Stand mit einem Fehler.

kommen am anfang folgende Fehler:
Starting a Gradle Daemon, 3 incompatible and 1 stopped Daemons could not be reused, use --status for details
Das ist kein Fehler sondern nur ein Hinweis. Gradle ist so aufgebaut, dass da ein Gradle Daemon (=Hintergrungprozess) gestartet wird, der dann durchläuft. Und wenn dann Gradle aufgerufen wird, schaut er, ob es einen Gradle Daemon gibt, der verwendet werden kann und das ist bei Dir gerade nicht der Fall.

meine jar läuft jetzt zwar, aber ich möchte das auch verstehen warum
Ich habe nur das Problem mit den Signaturen gelöst. Ich habe also nur angegeben, dass Dateien von den Signaturen aus dem META-INF Verzeichnis eben nicht übernommen werden sollen.

Die erste wichtige Sache war also vermutlich, dass Du mit dem Aufruf das fat jar neu gebaut hast.
 

Zurück
Oben