Ich versuche, ein sehr einfaches Projekt mit Gradle auszuführen, und bei der Verwendung von gradlew run command
: tritt der folgende Fehler auf :
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 Ordner libs und tmp ausgeschlossen, da ich nicht dachte, dass dies relevante Informationen für dieses Problem sind, aber ich kann sie bei Bedarf hinzufügen.
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'
}
Haben Sie 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.
quelle
sourceSets.main.java.srcDirs = ['src']
erhalte ich einen Fehler in derMissingPropertyException: Could not set unknown property 'mainClassName'
für Gradlew 4.1Ä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' } }
quelle
Ich bin gerade auf dieses Problem gestoßen und habe beschlossen, es selbst zu debuggen, da ich im Internet keine Lösung finden konnte. Ich habe nur den mainClassName in den gesamten Pfad geändert (mit den richtigen Unterverzeichnissen im Projekt ofc).
mainClassName = 'main.java.hello.HelloWorld'
Ich weiß, dass es fast ein Jahr her ist, seit der Beitrag verfasst wurde, aber ich denke, jemand wird diese Informationen nützlich finden.
Viel Spaß beim Codieren.
quelle
Nur um Neulingen klar zu machen, die versuchen, ein Gradle-Projekt über Netbeans auszuführen:
Um dies zu verstehen, müssen Sie sehen, wie der Name der Hauptklasse aussieht 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' }
quelle
Ich hatte einige Zeit mit dem gleichen Problem zu kämpfen. Nachdem die Verzeichnisstruktur src / main / java erstellt und die Quelle (oben im Paket) eingefügt wurde, funktionierte sie wie erwartet.
Das Tutorial , mit dem ich es versucht habe. Nach der Ausführung
gradle build
müssen Sie in der Lage sein,classes
unterbuild
Verzeichnis zu finden .quelle
build.gradle
Datei "neben" demsrc/
Verzeichnis befinden, nicht zusammen mit den .java-Dateien insrc/main/java/hello/
Für Netbeans 11-Benutzer funktioniert dies für mich:
apply plugin: 'java' apply plugin: 'application' // This comes out to package + '.' + mainClassName mainClassName = 'com.hello.JavaApplication1'
Hier ist im Allgemeinen mein Baum:
quelle
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' }
quelle
Wenn Sie sich entschieden haben, Ihre
hello.World
Klasse in Kotlin zu schreiben , besteht ein weiteres Problem möglicherweise darin, dass Sie darauf verweisen müssenmainClassName = "hello.WorldKt"
.src / main / java / hello / World.kt:
package hello fun main(args: Array<String>) { ... } // class World {} // this line is not necessary
quelle
Ich habe dies behoben, indem ich ein Clean-by-Gradle-Build ausgeführt habe (oder den Gradle-Build-Ordner manuell löschte).
Dies tritt auf, wenn Sie die Hauptklasse in ein neues Paket verschieben und die alte Hauptklasse weiterhin im Klassenpfad referenziert wird
quelle
Als ich diesen Fehler hatte, war es, weil ich meine Klasse nicht in einem Paket hatte . 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
hello
Ordner und wählen Sie "Neu"> "Paket". Geben Sie ihm dann einen Namen (z. B. com.example) und verschieben Sie IhreHelloWorld.java
Klasse in das Paket.quelle
Überprüfen Sie, ob gradle.properties die richtige JAVA_HOVE definiert
org.gradle.java.home = C: \ Programme (x86) \ Java \ jdk1.8.0_181
oder
quelle
Ich habe es behoben, indem ich meiner Anwendung den folgenden Code hinzugefügt habe.
// Code hier eingeben Dies ist ein Fehler, den ich beim Ausführen von build.gradle erhalten habe. Der Name der Hauptklasse wurde nicht konfiguriert und konnte nicht aufgelöst werden
public static void main(String[] args) { SpringApplication.run(Application.class, args); }
quelle
Für eine Projektstruktur wie
Fügen Sie in der Datei
build.gradle
die folgende Zeile hinzumainClassName = 'Main_File'
quelle