wake-up-neo.com

Gradle - Hauptklasse konnte nicht gefunden oder geladen werden

Ich versuche, ein sehr einfaches Projekt mit Gradle auszuführen und bei der Verwendung von gradlew run command den folgenden Fehler auszuführen:

could not find or load main class 'hello.HelloWorld'

Hier ist meine Dateistruktur:

SpringTest
    -src
        -hello
            -HelloWorld.Java
            -Greeter.Java
    -build
         -libs
         -tmp
    -gradle
         -wrapper
    -build.gradle
    -gradlew
    -gradlew.bat

Ich habe den Inhalt der libs- und tmp-Ordner ausgeschlossen, da ich nicht der Meinung war, dass dies für dieses Problem relevant wäre.

Hier ist meine build.gradle-Datei:

apply plugin: 'Java'
apply plugin: 'application'
apply plugin: 'Eclipse'

mainClassName = 'hello/HelloWorld'

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    compile "joda-time:joda-time:2.2"
}

jar {
    baseName = "gs-gradle"
    version = "0.1.0"
}

task wrapper(type: Wrapper) {
    gradleVersion = '1.11'
}

Eine Idee, wie Sie dieses Problem beheben können? Ich habe alle möglichen Dinge für das Attribut mainClassName ausprobiert, aber nichts scheint zu funktionieren.

47
twilco

Ich sehe hier zwei Probleme, eines mit sourceSet ein anderes mit mainClassName.

  1. Verschieben Sie die Java-Quelldateien entweder nach src/main/Java anstatt nur nach src. Oder setzen Sie sourceSet richtig, indem Sie Folgendes zu build.gradle hinzufügen.

    sourceSets.main.Java.srcDirs = ['src']
    
  2. mainClassName sollte vollständig qualifizierter Klassenname sein, nicht Pfad.

    mainClassName = "hello.HelloWorld"
    
54
kunal

Ändern Sie build.gradle, um Ihre Hauptklasse in das Manifest aufzunehmen:

jar {
    manifest {
        attributes 'Implementation-Title': 'Gradle Quickstart',
                   'Implementation-Version': version,
                   'Main-Class': 'hello.helloWorld'
    }
}
22
Noumenon

Ich bin gerade auf dieses Problem gestoßen und habe mich entschieden, es selbst zu debuggen, da ich im Internet keine Lösung finden konnte. Alles, was ich getan habe, ist, den mainClassName in seinen gesamten Pfad zu ändern (mit den richtigen Unterverzeichnissen im Projekt ofc).

    mainClassName = 'main.Java.hello.HelloWorld'

Ich weiß, es ist fast ein Jahr her, seit der Beitrag erstellt wurde, aber ich denke, dass jemand diese Informationen nützlich finden wird.

Glückliche Kodierung.

17
hepifish

Um es für Neulinge klar zu machen, die versuchen, ein Gradle-Projekt von Netbeans durchzuführen:
Um dies zu verstehen, müssen Sie sehen, wie der Hauptklassenname und wie der Gradle-Build aussieht: 

Hauptklasse: 

package com.stormtrident;

public class StormTrident {
    public static void main(String[] cmdArgs) {
    }
}

Beachten Sie, dass es Teil des Pakets "com.stormtrident" ist.

Gradle Build: 

apply plugin: 'Java'

defaultTasks 'jar'

jar {
 from {
        (configurations.runtime).collect {
            it.isDirectory() ? it : zipTree(it)
        }
    }    
    manifest {
        attributes 'Main-Class': 'com.stormtrident.StormTrident'
    }
}


sourceCompatibility = '1.8'
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'

if (!hasProperty('mainClass')) {
    ext.mainClass = 'com.stormtrident.StormTrident'
}

repositories {
    mavenCentral()
}

dependencies {
    //---Apache storm
    compile 'org.Apache.storm:storm-core:1.0.0'  //compile 
    testCompile group: 'junit', name: 'junit', version: '4.10'
}
7
Nav

Seit einiger Zeit kämpft das gleiche Problem. Nachdem Sie jedoch die Verzeichnisstruktur src/main/Java erstellt und die Quelle (oben im Paket) platziert haben, funktionierte sie wie erwartet.

Das Tutorial habe ich mit versucht. Nachdem Sie gradle build ausgeführt haben, müssen Sie classes im Verzeichnis build finden können.

1
Dino Tw

In meinem build.gradle habe ich dieses Problem behoben, indem ich eine Aufgabe erstellt und dann den "mainClassName" wie folgt angegeben habe:

task(runSimpleXYZProgram, group: 'algorithms', description: 'Description of what your program does', dependsOn: 'classes', type: JavaExec) {
    mainClassName = 'your.entire.package.classContainingYourMainMethod'
}
1
Psi-Ed

Ich habe das Problem gelöst, indem Sie meiner Anwendung den folgenden Code hinzugefügt haben.

// Code hier eingeben .__ Dies ist ein Fehler, den ich beim Ausführen von build.gradle erhalten habe. Hauptklassenname wurde nicht konfiguriert und konnte nicht aufgelöst werden

public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
}
1
Premakumar

Ich behebte das Problem, indem ich eine Bereinigung von Gradle Build ausführte (oder den Gradle Build-Ordner manuell löschte).

Dies tritt auf, wenn Sie die Hauptklasse in ein neues Paket verschieben und die alte Hauptklasse im Claspath weiterhin referenziert wird

0
JohnTheBeloved
  1. Überprüfen Sie, ob gradle.properties rechts eine Java_HOVE definiert

    org.gradle.Java.home = C:\Programme (x86)\Java\jdk1.8.0_181

oder 

  1. wenn es nicht definiert ist, stellen Sie sicher, dass Eclipse JDK und nicht JRE kennt

 enter image description here

0
cane

Als ich diesen Fehler hatte, lag das daran, dass ich hatte meine Klasse nicht in einem Paket . Legen Sie Ihre HelloWorld.Java-Datei in einem "Paket" -Ordner ab. Möglicherweise müssen Sie einen neuen Paketordner erstellen:

Klicken Sie mit der rechten Maustaste auf den Ordner hello und wählen Sie "Neu"> "Paket". Geben Sie ihm dann einen Namen (z. B. com.example) und verschieben Sie Ihre HelloWorld.Java-Klasse in das Paket.

0
RichArt

Für eine Projektstruktur wie

project_name/src/main/Java/Main_File.class

fügen Sie in der Datei build.gradle die folgende Zeile hinzu

mainClassName = 'Main_File'
0
kapsid

Wenn Sie sich entschieden haben, Ihre hello.World-Klasse in Kotlin zu schreiben, könnte es auch sein, dass Sie sie als mainClassName = "hello.WorldKt" referenzieren müssen.

src/main/Java/hallo/World.kt:

package hello
fun main(args: Array<String>) {
    ...
}
// class World {} // this line is not necessary
0
Giszmo