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.
Ich sehe hier zwei Probleme, eines mit sourceSet
ein anderes mit mainClassName
.
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']
mainClassName
sollte vollständig qualifizierter Klassenname sein, nicht Pfad.
mainClassName = "hello.HelloWorld"
Ä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'
}
}
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.
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'
}
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.
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'
}
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);
}
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
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.
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'
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