web-dev-qa-db-fra.com

Comment puis-je exécuter des fichiers Kotlin-Script (.kts) à partir de Kotlin / Java?

J'ai remarqué qu'IntelliJ peut analyser .kts fichiers comme Kotlin et l'éditeur de code les récupère sous forme de fichiers Kotlin flottants. Vous pouvez également exécuter le script dans IntelliJ comme vous le feriez pour un fichier Kotlin avec une méthode principale. Le script s'exécute de haut en bas.

Ce formulaire est PARFAIT pour le projet sur lequel je travaille, si seulement je connaissais un moyen facile de les utiliser depuis l'intérieur Java ou Kotlin.

Quelle est la manière idiomatique de "lancer" ces scripts depuis Java ou Kotlin?

25
Jire

Notez que la prise en charge des fichiers de script dans Kotlin est encore à peu près expérimentale. Il s'agit d'une fonctionnalité non documentée que nous sommes toujours en train de concevoir. Ce qui fonctionne aujourd'hui peut changer, se briser ou disparaître demain.

Cela dit, il existe actuellement deux façons d'invoquer un script. Vous pouvez utiliser le compilateur en ligne de commande:

kotlinc -script foo.kts <args>

Ou vous pouvez appeler le script directement depuis IntelliJ IDEA, en cliquant avec le bouton droit dans l'éditeur ou dans la vue du projet sur un fichier .kts et en sélectionnant "Exécuter ...":

Run .kts from IntelliJ IDEA

27
Alexander Udalov

KtsRunner

J'ai publié une bibliothèque simple qui vous permet d'exécuter des scripts à partir de programmes Kotlin réguliers.

https://github.com/s1monw1/KtsRunner

Exemple

  1. La classe d'exemple

    data class ClassFromScript(val x: String)
    
  2. Le .kts fichier

    import de.swirtz.ktsrunner.objectloader.ClassFromScript
    
    ClassFromScript("I was created in kts")
    
  3. Le code pour charger la classe

    val scriptReader =  Files.newBufferedReader(Paths.get("path/classDeclaration.kts"))
    val loadedObj: ClassFromScript = KtsObjectLoader().load<ClassFromScript>(scriptReader)
    println(loadedObj.x) // >> I was created in kts
    

Comme indiqué, la classe KtsObjectLoader peut être utilisée pour exécuter un .kts script et retourne son résultat. L'exemple montre un script qui crée une instance de type ClassFromScript qui est chargée via KtsObjectLoader puis traitée dans le programme normal.

7
s1m0nw1