web-dev-qa-db-fra.com

Kotlin - Configuration du projet IntelliJ

Je souhaite démarrer un nouveau projet avec Kotlin pour la machine virtuelle Java à l'aide de l'IDE IntelliJ, mais je ne parviens pas à obtenir une configuration pour que cela fonctionne. J'essayais de suivre ce tutoriel , et après cela ne fonctionna pas (l'option "Run '_DefaultPackage" "ne s'était jamais présentée), j'ai commencé à essayer de deviner ce qui était supposé être fait sans succès ..__ Que s'est-il passé jusqu'à présent (à plusieurs reprises):

  • J'ai créé un nouveau projet et sélectionné "Kotlin - JVM" comme type de projet.
  • J'ai cliqué sur le bouton "Créer ..." du runtime Kotlin sur la deuxième page et sélectionné "Copier vers: lib".
  • Je clique sur "Terminer" et le projet créé comporte un module portant le même nom que mon projet. Il n'y a pas de fichier source par défaut ni de configuration.
  • Je crée un fichier Kotlin nommé "app.kt" (j'ai aussi essayé d'autres noms, comme "Main.kt"), et j'insère le code source suivant dans:
fun main(args: Array<String>){
    println("Hello world!")
}
  • J'ai cliqué avec le bouton droit de la souris sur l'éditeur de code ET le fichier dans le volet de gauche pour rechercher l'option "Exécuter '_DefaultPackage'" mentionnée dans le didacticiel, mais je n'ai pas réussi à la trouver.
  • Je crée une nouvelle configuration Kotlin, qui demande que je mette dans une "classe principale". Voyant cela, je change le code en:
public class Main {
    fun main(args: Array<String>) {
        println("Hello world!")
    }
}
  • Je modifie ma configuration et règle la classe principale sur "Main", puis lance la configuration. Il échoue avec l'erreur suivante: "Erreur lors de l'exécution: la fonction 'main' est introuvable dans la classe 'Main'.

Qu'est-ce que je rate?

16

Vous ne pouvez pas assembler le projet car la méthode principale n'est pas statique. Donc, vous devriez le définir dans un objet compagnon.

class HelloKotlin {

        companion object {
            @JvmStatic fun main(args: Array<String>) {
                println("Kotlin main is running here!")
            }
        }
    }
27
Slava Sotone

Une réponse complète sur la manière d'identifier la classe exécutable pour une fonction main() de niveau supérieur ou d'utiliser une méthode main() au sein d'une classe est documentée dans cette autre réponse Stool Overflow: Comment exécuter les classes Kotlin

Cela couvre l'exécution en ligne de commande, dans Intellij (comme le demande votre question), Gradle, etc.

6
Jayson Minard

"Classe principale:" spécifiée -> com.mypackage.MainKt

Et créez le fichier Kotlin "Main" dans le package "com.mypackage"

package com.mypackage

fun main(args: Array<String>) {
    println("Hello Kotlin!")
}
2
maXp

Ouvrez votre fichier contenant votre fonction principale et allez dans le menu -> "Editer les configurations" puis sélectionnez "+" dans la boîte de dialogue, "Application" comme type, définissez le nom de votre choix et définissez la classe principale en cliquant sur le bouton à côté de la zone de saisie supérieure (celle intitulée "classe principale").

Sélectionnez "utiliser le chemin de classe du module" et sélectionnez votre module dans la liste déroulante. Cliquez sur "Appliquer" et fermez la boîte de dialogue. Vous devriez maintenant pouvoir utiliser Shift + F10, déboguer avec Shift + F9 et modifier les configurations d’exécution avec Shift + Alt + F10. Vous pouvez également exécuter ou déboguer à partir des deux boutons en haut à droite de votre écran principal.

2
tomjen

J'ai déplacé mon fichier main.kt dans le dossier src du projet et le problème a été résolu IntelliJ pourrait trouver la classe MainKt

1

Je devais mettre à jour mon plugin Kotlin (qui est sorti très récemment), puis les options de clic droit pour l'exécution ont commencé à apparaître. Je ne pouvais pas cerner le problème à autre chose, alors je pense que c'est tout. 

Si vous rencontrez ce problème, cliquez avec le bouton droit sur le fichier de code source où se trouve votre fonction principale et cliquez sur Exécuter, Créer ou Déboguer.

Notez que la fonction principale doit porter le nom "main" (sans majuscule) et un argument "Array". Celui-ci m'a pris à quelques reprises lorsque je faisais de nouveaux projets en essayant de le faire fonctionner.

0

Cliquez simplement avec le bouton droit de la souris sur la classe que vous souhaitez exécuter et sélectionnez l'option Exécuter ClassNameKt. Reste sera effectué par IntelliJ IDE.

0
user2323471