Erreur: impossible de trouver ou de charger la classe principale dans intelliJ IDE

151

Je suis un débutant en Java et j'essaie d'exécuter mon code en utilisant IntelliJ que je viens d'installer comme mon IDE avec JDK 1.7. Le morceau de code suivant ne se compile même pas et continue de me donner l'erreur:

Error: Could not find or load main class libTest

Code

import java.lang.Integer;
import java.lang.String;
import java.lang.System;
import java.util.*;

class book {

    private String name = "trial";
    private int bookCode=1;
    private int issued=0;

     public void Issue(){
         if(issued==0) {
             issued=1;
             System.out.println("You have succesfully issued the book");
         }
         else {
             System.out.println("The book is already issued. Please contact the librarian for further details");
         }
    }

    public int checkCode() {
        return bookCode;
    }

    String readName() {
        return name;
    }

    public void setName(String newName){
        name=newName;
    }

    public void setBookCode(int newCode){
        bookCode=newCode;
    }
}

class library {
    private ArrayList books=new ArrayList();

    public void getList(){
        for(int bk:books){
            String bName=books(bk).readName();
            System.out.println((bk+1)+")  "+bName);
        }
    }
}

public class libTest{
    public static void main(String[] args){
        library newLib= new library();
        System.out.println("code working");
   }
}

Y a-t-il des changements que je dois faire dans les paramètres du compilateur? Ou est-ce le code.

Mailman confus
la source
2
Quel est le nom du fichier source? C'est ça libTest.java?
QuantumMechanic
import java.lang...Cela se produit automatiquement pour les classes du langpackage.
Andrew Thompson
Comme mentionné par QuantumMechanic, votre classe principale doit être dans un fichier nommé exactement comme lui. Donc, libTest doit être dans un fichier java nommé libTest.java, sinon le compilateur java se plaindra. De plus, avez-vous créé la source via IDEA ou avez-vous créé un nouveau projet IDEA sur la source existante?
mcfinnigan
essayé d'importer java.lang n'a fait aucune différence
Confused Mailman
ils sont identiques. Y a-t-il une autre raison pour laquelle une telle erreur devrait être signalée?
Confused Mailman

Réponses:

178

Cela pourrait aider:

1) Menu "Construire" -> " Rebuild Project". Parfois, Intellij ne réécrit pas les classes parce qu'elles existent déjà, de cette façon vous demandez à Intellij de tout réécrire.

2) Menu "Exécuter" -> " Edit configuration" -> supprimer le profil -> rajouter le profil ("Application" s'il s'agit d'une application Java), choisissez votre classe principale dans le menu déroulant "Classe principale".

3) Menu "Construire" -> " Rebuild Project".

Ehsan
la source
9
J'avais un tout nouveau projet dans IntelliJ et il ne fonctionnait pas. Rebuild Projecttravaillé pour moi!
Danny Harding
La deuxième option a fonctionné pour moi. Mais supprimez le profil de configuration, puis cliquez avec le bouton droit sur votre classe -> exécuter
NoName
2
"Build" menu -> "Rebuild Project- a fait le travail! Merci
Yan Khonski
1
La première option a rebuild projectfonctionné pour mon problème. Je vous remercie!
khwilo
1
J'ai supprimé les répertoires .idea, .mvn et d'autres cibles, puis j'ai redémarré IntelliJ. Je suis allé au journal des événements, j'ai ajouté un projet en tant que projet Maven, puis j'ai suivi les étapes mentionnées par @Kishore ici. Il fonctionne maintenant.
Sunny Shekhar
105

Si aucune des réponses ci-dessus n'a fonctionné pour vous, fermez simplement votre intelliJ IDE et supprimez le fichier et le dossier intelliJ IDE de la racine du projet:

rm -rf .idea *.iml 

Ensuite, ouvrez le projet avec intelliJ. Cela doit fonctionner maintenant.

youhans
la source
1
Cela a fonctionné pour moi. J'ai également réimporté mon projet dans IntelliJ, mais pour l'option "Group Modules", j'ai utilisé "using des noms qualifiés" (au lieu de "using explicit module groups".
markhops
3
La suppression du .ideadossier résout toujours tous les problèmes avec les IDE de JetBrains :)
shelll
cela a fonctionné pour moi aussi, je suis un grand fan d'Intellij, mais ils doivent aussi apprendre à faire des choses simples.
Zwakele Mgabhi le
Gâché plus de 30 minutes. enfin voici ce que j'ai dû faire pour que les choses fonctionnent
vins
Seule cette méthode sur cette page fonctionne pour moi.
zionpi
82

Pour moi, la solution était de corriger le répertoire de sortie sous les paramètres du projet. Avant, j'utilisais simplement "cible" pour la sortie du compilateur de projet. Au lieu de cela, je l'ai mis à jour pour avoir un chemin complet, par exemple D: \ dev \ sigplusjava2_68 \ target entrez la description de l'image ici

Oncle Iroh
la source
10
qui ne m'a pas aidé
Pavel
Il est possible que ma solution ici soit en fait une variation subtile de la réponse de @ Ehsan ci-dessous. Peut-être qu'en spécifiant le répertoire cible, cela lui donne un nouvel emplacement dans lequel compiler tous les objets effectuant essentiellement le même travail que a Rebuild Project.
Uncle Iroh
1
@UncleIroh S'il a fait le même travail, reconstruction + lecture de la configuration. aurait résolu le problème au départ. Non, mais votre solution l'a fait.
hyperum
Cela devrait être la réponse acceptée. Toujours m'embêter à nouveau ..: p
Christopher Stock
38

J'ai eu ce problème et j'ai essayé tout ce que j'ai pu imaginer sous le soleil et sur ce site.

Aucune de mes classes Java n'était récupérée après que je sois sorti d'une branche distante. Toutes les classes avaient des J rouges par leurs noms dans la hiérarchie du projet, pas des C bleus.

En fin de compte, j'ai essayé de suivre ce tutoriel et quelques étapes pour essayer quelque chose de non décrit et j'ai résolu le problème: https://www.jetbrains.com/help/idea/creating-and-managing-modules.html

Voici ce que j'ai fait:

  1. Aller au fichier | Structure du projet, ou appuyez sur Crtl + Maj + Alt + S
  2. Sélectionnez Modules dans la section Paramètres du projet.
  3. Dans l'onglet Sources, cliquez sur Sources sur la ligne «Marquer comme:».
  4. Cliquez sur le bouton Appliquer.

Pour une raison quelconque, toutes mes classes avaient alors des C bleus.

Quelqu'un avec une meilleure compréhension de la façon dont IntelliJ et / ou IDE pourraient être en mesure d'expliquer le phénomène, mais tout ce que je sais, c'est maintenant qu'il peut voir toutes les classes et plus important encore la principale, et fonctionner.

Sarah Cohen
la source
Cela n'a fonctionné pour moi qu'après avoir fermé Intellij, supprimé le dossier .idea, puis rouvert Intellij et suivez les étapes ci-dessus.
Shell_Leko
14

Création explicite d'un outdossier, puis définition du chemin de sortie surC:\Users\USERNAME\IdeaProjects\PROJECTNAME\out

COMME ÇA

semblait fonctionner pour moi quand juste out, et s'attendre à ce qu'IntelliJ crée le dossier ne le ferait pas.


Essayez également de demander à IntelliJ de créer une nouvelle configuration d'exécution:

Trouvez le précédent en cliquant

! [Modifier les configurations

puis enlevez-le

entrez la description de l'image ici

et frappez bien.

Maintenant, (ÉTAPE IMPORTANTE) ouvrez la classe contenant votre méthode principale. Ceci est probablement plus simple en cliquant sur le nom de la classe dans le volet Projet de gauche.

Donnez un Alt+ Shift+ F10et vous devriez obtenir un

CE

Maintenant frappez Enter!!

Et voilà?? (Cela a-t-il fonctionné?)

Brad Turek
la source
La configuration d'exécution fonctionne, surtout si vous avez déplacé la main()fonction de class Mainvers une autre classe. Dans ce cas, modifiez la configuration d'exécution comme indiqué ci-dessus et remplacez la valeur de «Classe principale» par le nom de votre classe (qualifié complet).
forumulator
Je n'ai que l'option "Modifier la configuration", ne fonctionne pas pour moi (
Ver Nick
Je n'ai pas pu m'empêcher de remarquer que vous avez détecté le nom de votre projet et exécuté la configuration, mais il est toujours clairement visible sur la deuxième capture d'écran
Jacob Schneider il y a
Jacob Schneider, ça l'est. Je ne me souviens pas pourquoi je l'ai censuré - probablement par manque de prudence.
Brad Turek il y a
14

Invalidez le cache et redémarrez votre intellij, cela a fonctionné pour moi. Aller au fichier comme indiqué dans l'image ci-jointe

S_K
la source
7

Je sais que cela a été demandé il y a quelque temps, mais je trébuchais juste sur ce problème et pensais que mes découvertes pourraient aider les autres. Comme indiqué, le message d'erreur est essentiellement le résultat du dossier out. C'est parce que, lorsque vous essayez d'exécuter le programme, il compile d'abord le code et place le résultat compilé à l'emplacement de sortie, puis il essaie de charger le code compilé à partir de l'emplacement de sortie. Si le code compilé ne se trouve pas à l'emplacement prévu, vous obtiendrez l'erreur.

Le point que je souhaite particulièrement partager est que parfois, le code n'est pas compilé (construit), même si votre configuration d'exécution spécifie "Construire" dans la section "Avant le lancement" du panneau de configuration.

Quand cela peut-il arriver? Une situation qui peut provoquer cela est si vous utilisez des modules et que vous supprimez manuellement le répertoire module out. Par exemple, si j'ai un module nommé "foo", il devrait y avoir un répertoire nommé foo sous out / production. Si vous le supprimez manuellement, le système de construction peut ne pas savoir qu'il doit être reconstruit.

Pire encore, si vous sélectionnez Construire | Construisez le module 'foo', il ne peut toujours pas reconstruire le module. Si tel est le cas, vous devez sélectionner un fichier dans le module, par exemple «bar.java», puis sélectionner Build | Recompilez 'bar.java'. Maintenant, le répertoire out / production / foo doit être restauré.

Comme IntelliJ est généralement au courant de tous les changements en cours, cela m'a surpris et m'a pris un peu de temps à comprendre, alors j'ai pensé partager.

msoltys
la source
6

Vérifiez votre module de cours : j'ai rencontré ce problème avec intellij: j'ai un projet multi-module maven, le problème est que j'exécute une classe qui n'existe pas le module dans la configuration, donc mon problème est résolu en définissant le bon module ( "modifier la configuration" -> "utiliser la classe du module")

que cela vous aide

Abdessattar NOISSI
la source
A travaillé pour moi aussi. Merci! Une erreur s'est probablement produite lors de l'installation d'une mise à jour d'IntelliJ ou du plugin Scala. Ensuite, vous obtenez cet étrange problème. Très ennuyeux et prend du temps. Espérons que JetBrains trouve une résolution.
André van Delft
6

J'ai dû marquer le dossier "src" comme "Sources". Après avoir redémarré IntelliJ et reconstruit le projet, je pouvais exécuter le projet sans autres problèmes (voir capture d'écran ). Modifier: Vous pouvez accéder à l'onglet "Structure du projet" via Fichier-> Structure du projet ou en appuyant sur Ctrl + Maj + Alt + S.

NÉMÉSIS
la source
1
Si vous (comme moi) n'avez pas d'onglet «sources», alors vous devez ajouter un nouveau module (cliquez sur le + vert) et sélectionnez votre dossier principal comme source. Rien ne sera écrasé et le dossier src deviendra bleu.
john ktejik
5

Ouvrez l'onglet Modules (appuyez sur Ctrl + Maj + Alt + S). J'avais deux modules sous un même projet. J'ai résolu le problème après avoir supprimé le deuxième module redondant (voir capture d'écran).entrez la description de l'image ici

Taras Melnyk
la source
4

J'ai rencontré de tels problèmes lorsque la classe est dans le dossier par défaut, c'est-à-dire lorsque la classe ne déclare pas de package.

Donc, je suppose que l'utilisation d'une instruction package (par exemple package org.me.mypackage;) au-dessus de la classe devrait le corriger.

Hakan Serce
la source
est-ce que je réplique cette ligne de code ?? .. comment puis-je la modifier au cas où je devrais ??
Confused Mailman
Utilisez simplement votre propre nom de package, comme celui-ci:package org.confused.mailman;
Hakan Serce
Eh bien, la déclaration de package doit correspondre à l'endroit où l'EDI a placé le fichier. Si l'EDI n'a pas mis le fichier dans sourceBase / org/confused/mailmanalors l'ajout de cette ligne de package ne va pas aider.
QuantumMechanic
Je suppose que l'EDI guidera cela et corrigera automatiquement cela si le correctif recommandé est sélectionné.
Hakan Serce
ne pas aider: / .. l'IDE ne semble pas être dérangé par aucun des changements que je fais..il jette l'erreur ci-dessus et s'assoit en arrière et se détend
Confused Mailman
3

Fichier> Structure du projet> Modules> Marquer le dossier "src" comme source. Cela devrait résoudre le problème. Vérifiez également que la dernière langue est sélectionnée afin que vous n'ayez pas à changer de code ou à faire des changements de configuration. entrez la description de l'image ici

Sumit Jadiya
la source
Réponse en double.
Jay Sullivan il y a
2

Dans mon cas, le problème semblait être lié à la mise à niveau d'IntelliJ. Quand j'ai fait cela, j'ai écrasé les fichiers de l'ancien IntelliJ avec les fichiers de la nouvelle IntelliJ (communauté 2017 à communauté 2018). Après cela, tous mes projets ont été interrompus. J'ai tout essayé dans ce fil et aucun d'entre eux n'a fonctionné. J'ai essayé de mettre à niveau gradle vers la dernière version (4 à 4.8) et cela n'a pas fonctionné. La seule chose qui a fonctionné pour moi a été de supprimer tout le dossier IntelliJ et de le réinstaller. Tous mes projets ont fonctionné après cela.

aveugle
la source
Il semble que ce soit effectivement ça. J'utilise l'intellij portable, j'ai donc renommé le dossier principal comme de idea\binto be idea_old\binet renommé le dossier de paramètres dans %user%\usernamelequel le fichier zip intellij .IntelliJIdea2018.2doit être .IntelliJIdea2018.2_oldré-extrait pour commencer à l'utiliser comme nouvelle version portable (il s'agit de la version 2018.2.1) avec Spring Application de démarrage de plusieurs modules séparés (non liés dans pom.xml parent unique), chacun est une application de démarrage de printemps avec son propre pom.xml et le tour est joué !!! Tous les travaux, dossier cible créé, compilation avant de passer par le tableau de bord Spring Boot.
Anddo
1

Pour moi, j'ai essayé quelques-unes des options ci-dessus, cela n'a pas fonctionné. Ensuite, je viens de renommer ma classe Application et cela a probablement forcé intelliJ à créer un nouveau fichier jar et le message d'erreur a commencé à changer. Ensuite, je l'ai renommé et cela a fonctionné.

JavaTec
la source
1

Marquez le répertoire comme répertoire source. Ouvert via Ctrl + Maj + Alt + S

entrez la description de l'image ici

Crt
la source
Réponse en double.
Jay Sullivan il y a
1

J'ai essayé tous les hacks suggérés ici - en vain. À la fin, j'ai simplement créé une nouvelle application Maven et copié manuellement dedans - un par un - le pom.xml et les fichiers et ressources java. Tout fonctionne maintenant. Je suis nouveau sur IntelliJ et totalement peu impressionné, mais comme il est facile de le mettre dans un état instable.

Pierluigi Vernetto
la source
Vous devez fermer intellij, supprimer le dossier .idea (probablement un fichier caché); puis ouvrez à nouveau le dossier dans intellij - cela réinitialisera le projet intelli basé sur la configuration maven / grade.
Jeremy
1

entrez la description de l'image ici

modules.xml avec un mauvais contenu, je ne sais pas ce qui compte avec mon IDEA.

ibambou
la source
1

J'ai hérité d'un tas de fichiers .JAVA d'ailleurs et je ne savais pas comment les faire fonctionner dans n'importe quel IDE. En fin de compte, j'ai dû accéder à la ligne de commande où se trouvait le fichier Main.JAVA et l'exécuter javac Main.java. Cela a créé un tas de fichiers .CLASS. Les IDE ont alors pu déterminer ce qu'il fallait faire.

codeMonkey
la source
1

J'ai eu cette erreur lors de l'utilisation de Scala / SBT . IntelliJ n'a pas pu trouver la classe principale, même si tout a été configuré correctement. Ma solution: supprimez le <user>/.sbt/<version>/plugins/targetdossier, puis redémarrez IntelliJ.

Beni Murza
la source
1

J'utilise IntelliJ avec Spring et ma classe principale est enveloppée dans un JAR. J'ai dû marquer le 'Inclure les dépendances avec la portée "Fourni"' dans la boîte de dialogue de configuration Exécuter / Déboguer

Ohad Y
la source
1

Nous sommes à la structure du fichier / projet .. La réponse pourrait être:

Le dossier indiqué comme "racine du contenu" nécessite un dossier enfant dans lequel se trouve le code. De plus, trouvez le bouton qui marque le code comme exclu et non. À ne pas confondre avec la case à cocher qui déclare exclu sans dire dans quelle phase et quoi ** Est-ce une exclusion du compilateur ou une exclusion à l'exécution? Vous êtes condamné à tester et beaucoup. Donc pas de case à cocher mais des icônes et des couleurs.

En tant qu'idée, nous devons comprendre comment cela a été pensé à l'origine. Ils ne l'ont jamais fait fonctionner en premier lieu et ont commencé à ajouter des éléments dans un style de codaculation prématurée. Cela fait tant d'années et vous ne pouvez vous attendre à aucune amélioration. Mais comme remède, nous pouvons trouver un moyen de faire les choses correctement à chaque fois.

Kurskinen
la source
1

Une autre chose que vous pouvez vérifier ici est la commande réelle qui est passée à la JVM et assurez-vous qu'elle semble correcte. Faites défiler vers le haut de votre console Run, cela devrait être la première ligne.

Les espaces dans votre champ Options d' exécution de la machine virtuelle de configuration malformeront la commande de démarrage de l'application et peuvent entraîner ce message d'erreur

-DsomeArgument="arg with space must be quoted"
Oui
la source
Merci ! Cela a fonctionné pour moi !!
Jcoder
0

Élaboration de la solution de Brad Turek ... L'un des modèles de projet IntelliJ Java par défaut attend un fichier appelé Main définissant le point d'entrée de la classe Main et de la méthode main () . Si la méthode est contenue dans un autre fichier (et classe), modifiez la configuration Run :

Exécuter la fenêtre de configuration

  1. Avec le projet ouvert dans IntelliJ, utilisez le menu Exécuter: Modifier les configurations ... pour ouvrir la fenêtre de configuration de construction.
  2. Si l'entrée de la classe Main ne répertorie pas le nom de votre fichier contenant la classe exposant le main () méthode d'entrée , entrez le nom de fichier correct. (La configuration de l'image est incorrecte, c'est pourquoi elle est rouge dans le panneau de configuration.)
  3. Ma méthode d'entrée principale () est dans la classe (et le fichier) ScrabbleTest . Donc, changer la classe Main: to ScrabbleTest corrige l'erreur d'exécution.

Comme d'autres l'ont noté, vous devez ReBuild en utilisant la nouvelle configuration. J'utilise un package, mais cela ne semble pas faire de différence IME. J'espère que cela t'aides.

JHake
la source
0

Dans mon cas, dans le build.gradle du module, l'affectation mainClassName doit indiquer le nom de classe pleinement qualifié, c'est-à-dire. comme spécifié comme nom de package dans le fichier de code source de la classe principale.

Matthieu
la source
0

Reconstruisez simplement le projet (CTRL + F9) et vérifiez (Modifier les configurations) si vous avez une classe Main et un module correctement définis (le cas échéant)

AlexPes
la source
0

Une solution simple consiste à accéder au dossier sauvegardé en ligne de commande, où se trouve le dossier racine du projet. Vous devriez avoir installé SBT sur votre machine.

Si vous avez installé sbt, veuillez exécuter la commande "paquet sbt", cela recompilera le projet si cela réussit, revenez à l'intelliJ cela fonctionnera.

Ratheesh
la source
Bienvenue à SO! Lorsque vous répondez à une réponse, veillez à ce qu'elle soit juste, essayez de l'expliquer un peu.
David García Bodego
0

Dans mon cas, j'avais configuré des arguments vm (relativement) longs. La conversion de ces arguments (chaque fois que possible) en variables d'environnement a résolu le problème pour moi

Ahmed Sayed
la source
Vous ne pouvez pas avoir d'espaces dans les options de votre VM sauf si vous mettez des "guillemets" autour des arguments
Oui
0

Dans mon cas, l'application fonctionne bien lorsque le code était initialement dans le répertoire / src sous le projet. Plus tard, j'ai ajouté le répertoire / main / java après le / src, puis l'erreur "Impossible de trouver ou de charger la classe principale ..." s'est produite. À ce moment-là, vous ne pouviez pas ajouter /src/main/java/YourMain.java à la configuration d'exécution. Ce que j'ai fait était de supprimer la configuration d'exécution, puis cliquez avec le bouton droit sur le projet-> Ouvrir les paramètres du module (ou F4 après avoir cliqué sur le panneau Projet) -> Paramètres du projet-> Modules supprimez (x) l'ancienne racine de contenu et + Ajouter une racine de contenu, choisissez / src / main / java. Reconstruisez le projet et il s'exécute.

TGU
la source
0

Vous auriez probablement spécifié un package incorrect et la hiérarchie des packages ne serait pas correcte. Regardez ci-dessous

entrez la description de l'image ici

L'ide mettrait en évidence le mauvais chemin dans ce cas.

Akash Yellappa
la source
0

Dans mon cas, c'est un projet maven, j'ai réimporté maven (clic droit sur le fichier pom.xml et cliquez sur Réimporter ) qui a fonctionné immédiatement.

ddc
la source