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?
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 ...":
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
La classe d'exemple
data class ClassFromScript(val x: String)
Le .kts
fichier
import de.swirtz.ktsrunner.objectloader.ClassFromScript
ClassFromScript("I was created in kts")
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.