J'essaie de lancer un projet très simple avec Gradle et de rencontrer l'erreur suivante avec le gradlew run command
:
could not find or load main class 'hello.HelloWorld'
Voici la structure de mon fichier:
SpringTest
-src
-hello
-HelloWorld.Java
-Greeter.Java
-build
-libs
-tmp
-gradle
-wrapper
-build.gradle
-gradlew
-gradlew.bat
J'ai exclu le contenu des dossiers libs et tmp car je ne pensais pas que ce serait une information pertinente pour ce problème, mais je peux l'ajouter si nécessaire.
Voici mon fichier build.gradle:
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'
}
Une idée sur la façon de résoudre ce problème? J'ai essayé toutes sortes de choses pour l'attribut mainClassName mais rien ne semble fonctionner.
Je vois deux problèmes ici, un avec sourceSet
un autre avec mainClassName
.
Déplacez les fichiers source Java vers src/main/Java
au lieu de src
. Ou définissez correctement sourceSet
en ajoutant ce qui suit à build.gradle.
sourceSets.main.Java.srcDirs = ['src']
mainClassName
devrait être un nom de classe complet, pas un chemin.
mainClassName = "hello.HelloWorld"
Modifiez build.gradle pour mettre votre classe principale dans le manifeste:
jar {
manifest {
attributes 'Implementation-Title': 'Gradle Quickstart',
'Implementation-Version': version,
'Main-Class': 'hello.helloWorld'
}
}
Je viens de rencontrer ce problème et j'ai décidé de le déboguer moi-même, car je ne trouvais pas de solution sur Internet. Tout ce que j'ai fait est de changer le mainClassName en son chemin complet (avec les sous-répertoires appropriés dans le projet ofc)
mainClassName = 'main.Java.hello.HelloWorld'
Je sais que cela fait presque un an que le poste a été publié, mais je pense que quelqu'un trouvera cette information utile.
Bonne codage.
Pour que ce soit clair pour les débutants qui essaient d’exécuter un projet de gradation à partir de Netbeans:
Pour comprendre cela, vous devez voir à quoi ressemble le nom de la classe principale et à quoi ressemble la construction de gradle:
Classe principale:
package com.stormtrident;
public class StormTrident {
public static void main(String[] cmdArgs) {
}
}
Notez qu'il fait partie du package "com.stormtrident".
Gradle construction:
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'
}
Lutté avec le même problème pendant un certain temps. Mais après avoir créé la structure de répertoires src/main/Java et mis le source (du haut du paquet), cela a fonctionné comme prévu.
Le tutorial J'ai essayé avec. Après avoir exécuté gradle build
, vous devrez pouvoir trouver classes
dans le répertoire build
.
Dans mon build.gradle, j'ai résolu ce problème en créant une tâche puis en spécifiant le "mainClassName" comme suit:
task(runSimpleXYZProgram, group: 'algorithms', description: 'Description of what your program does', dependsOn: 'classes', type: JavaExec) {
mainClassName = 'your.entire.package.classContainingYourMainMethod'
}
Je l'ai résolu en ajoutant le code ci-dessous à mon application.
// entrez le code ici c'est l'erreur que je rencontrais lorsque j'exécute build.gradle. le nom de la classe principale n'a pas été configuré et il n'a pas pu être résolu
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
J'ai résolu ce problème en exécutant un nettoyage de Gradle Build (ou en supprimant manuellement le dossier Gradle Build).
Cela se produit si vous déplacez la classe principale vers un nouveau package et que l'ancienne classe principale est toujours référencée dans le champ claspath.
Quand j'ai eu cette erreur, c'était parce que je n'avais pas ma classe dans un paquet. Placez votre fichier HelloWorld.Java
dans un dossier "package". Vous devrez peut-être créer un nouveau dossier de package:
Faites un clic droit sur le dossier hello
et sélectionnez "Nouveau"> "Package". Puis donnez-lui un nom (par exemple: com.example) et déplacez votre classe HelloWorld.Java
dans le package.
Pour une structure de projet comme
project_name/src/main/Java/Main_File.class
dans le fichier build.gradle
, ajoutez la ligne suivante
mainClassName = 'Main_File'
Si vous avez décidé d'écrire votre classe hello.World
dans Kotlin, un autre problème pourrait être que vous deviez la référencer avec mainClassName = "hello.WorldKt"
.
src/main/Java/hello/World.kt:
package hello
fun main(args: Array<String>) {
...
}
// class World {} // this line is not necessary