web-dev-qa-db-fra.com

Le projet Scala ne se compilera pas dans Eclipse; "N'a pas pu trouver la classe principale."

J'ai installé Eclipse 3.5.2 et le plugin Scala actuel depuis/update-current (c'est Scala 2.8 final.) Je peux compiler et exécuter des projets Scala consistant en un seul objet singleton implémentant main (). 

Mais si un projet contient plus de classes, je reçois l'erreur "Impossible de trouver la classe principale".

J'ai essayé de chercher la solution et j'ai découvert:

Eclipse cherche correctement la classe Main $, pas la classe Main
* sous Debug Configurations, ma classe principale est correctement identifiée comme étant mypackage.Main
* mon plugin est à jour et recommandé pour ma version d'Eclipse
* le nettoyage, le redémarrage, etc. n’aident pas. 

Le même projet sera compilé avec scalac.

Merci pour toutes les idées sur la façon de résoudre ce problème.

EDIT: MatthieuF a suggéré que je devrais poster le code. 

Cet extrait produit une erreur. Ce n'est pas le code le plus idiomatique, mais je l'ai écrit de cette façon pour tester mon environnement. Je l'ai essayé en tant que fichier unique et en tant que fichiers séparés. Cela fonctionne avec scalac.

import swing._

class HelloFrame extends Frame {
        title = "First program"
        contents = new Label("Hello, world!")
}

object Hello {
  val frame = new HelloFrame    
  def main(args : Array[String]) : Unit = {
        frame.visible = true
   }
}

MAIS, si j'embrouille la définition de HelloFrame dans Hello, cela fonctionne. Cet extrait fonctionne parfaitement:

import swing._

object Hello {

    class HelloFrame extends Frame {
        title = "First program"
        contents = new Label("Hello, world!")
    }

    val frame = new HelloFrame

    def main(args : Array[String]) : Unit = {
        frame.visible = true
    }
}
23
Thomas Heywood

Pour moi, le problème était qu’il y avait une erreur de compilation (voir Onglet Problèmes) qui empêchait la compilation; Oops! L'erreur est due au fait que la macro d'exécution continue malgré l'étape de compilation ayant échoué et tente d'exécuter les fichiers de classe qu'elle s'attend à y trouver. ils n'existent pas car il y avait une erreur de construction empêchant la compilation, donc il dit qu'il ne peut pas trouver Main (non compilé).

Le problème disparaît lorsque la construction peut être terminée avec succès, c.-à-d. Que les erreurs sont corrigées.

En théorie, j’imagine qu’il peut y avoir des raisons plus compliquées que votre construction n’aboutit pas et qui ne figurent pas dans la section Problèmes.

21
ninjagecko

Une possibilité est que vous essayez de lancer en utilisant ctrl-F11, mais à partir d'une classe différente.

Le plugin Scala Eclipse n'obéit pas aux valeurs par défaut pour le lancement de Java. Dans Préférences-> Exécuter/Déboguer-> Lancer, il y a quelques options Lancer Opération-> Toujours Lancer l'application précédemment sélectionnée, etc. Cela ne fonctionne actuellement pas dans le plug-in Scala Eclipse. Pour lancer un principal spécifié, vous devez le lancer depuis l'éditeur de la classe.

Un bug a été soulevé pour cela. http://scala-ide.assembla.com/spaces/scala-ide/tickets/1000023-scala-launch--does-not-follow-jdt-behaviour

EDIT: Ceci est maintenant (principalement) corrigé.

5
Matthew Farwell

Pour moi, c'était un problème spécifique à Eclipse. J'ai remarqué que le fichier .class n'était pas du tout construit. Donc, le répertoire bin n'a pas de classes compilées . Lorsque j'ai compilé manuellement le fichier * .scala à l'aide de * .sbt et que je l'ai copié dans le répertoire bin, il fonctionnait comme prévu . t travaillé jusqu’à ce que je réinstalle le plugin Scala dans Eclipse .

4
user1459144

Je résoudrais le même problème en exécutant "Projet-> Nettoyer .." en construisant ensuite automatiquement.

2
Leon Rom

J'ai eu le même message d'erreur avec une application Java faite par moi-même.

Le problème était que j'ai supprimé (bien qu'à l'intérieur d'Eclipse) un fichier jar appartenant au chemin de construction Java , sans le supprimer du chemin de construction Java (fenêtre Propriétés du projet). Quand je l’ai fait, la classe pouvait compiler et exécuter à nouveau.

1
bluish

Si vous utilisez Intellij, marquez le répertoire comme racine source

0
azzurolilc

Vérifiez scala-ide.log

Pour moi, le problème était qu'il y avait des erreurs sur:

AppData\Local\Temp\sbt_10d322fb\xsbt\ClassName.scala: 16: erreur: non trouvé: valeur entryPhase enterPhase (currentRun.flattenPhase.next) {s séparateur du nom complet}

0
Daniel Sobrado

Avez-vous un bon outil de compilation? Comme sbt l'avez-vous installé? 

Vous pouvez vérifier sa version par $ sbt --version

Si ce n'est pas le cas, vous pouvez télécharger ici http://www.scala-sbt.org/download.html

Vous devrez peut-être redémarrer votre Eclipse après l’installation. 

0
bugs

Assurez-vous que les fichiers .class existent, généralement sous le répertoire bin.

En particulier, si vous rencontrez des erreurs dans des fichiers non liés du même projet, la compilation peut échouer et aucun fichier .class ne sera produit.

0
starblue

J'ai fait face à ce problème. Je viens de supprimer le nom du paquet, la classe scala créée, le même code écrit, Set Build à "Build Automatically". Enfin, cela fonctionne parfaitement bien.

0
Ashiq Imran

Copiez simplement le code de votre fichier XXX.scala. Supprimez le package et créez une nouvelle classe Scala. Collez votre code XXX.scala. (Si vous utilisez maven, effectuez un nettoyage et une construction de maven.) Exécutez à nouveau la configuration. Cela fonctionne pour moi.

0
Ashiq Imran

Il peut y avoir le cas de projets, contenant des erreurs, ajoutés au chemin de génération de l'application, ce qui empêche la fin de la compilation. Assurez-vous de supprimer tout projet de ce type du chemin de génération avant d'exécuter l'application.

La suppression de ces projets a résolu le problème pour moi. 

0
Maqsood Ahmad