Comment puis-je exécuter un sbt classe principale de la coque comme normal programme de ligne de commande?
Comment puis-je exécuter un sbt application à partir de la coquille, de sorte que je peux utiliser mon application comme un programme de ligne de commande (comme s'exécuter directement via scala
mais sans avoir à configurer un énorme chemin de classe)?
Je sais que je peux faire:
echo hello | sbt 'run-main com.foo.MyMain3 arg1 arg2' > out.txt
Mais cette (1) prend une éternité à démarrer car il commence sbt, (2) les causes de tous les stdout et stderr pour aller vers la sortie standard, et (3) les causes de toutes les sorties à être décorées avec un enregistreur [info] ou [erreur].
J'ai regardé https://github.com/harrah/xsbt/wiki/Launcher mais il semble trop lourd, car il télécharge les dépendances et met en place un nouvel environnement et autres joyeusetés. Je tiens juste à exécuter cette application au sein de mon environnement de développement existant.
A ce jour, j'ai bricolé mon propre script pour construire un chemin de classe, et vous pouvez aussi faire d'autres choses comme modifier votre fichier de projet pour obtenir sbt pour imprimer le raw classpath, mais je me sens comme il doit y avoir une meilleure façon.
- comme
mvn exec:java
oumvn appassembler:assemble
Vous devez vous connecter pour publier un commentaire.
La start-script SBT plugin est maintenant à:
https://github.com/sbt/sbt-start-script
Il nécessite quelques étapes pour configurer et génère des scripts qui ne fonctionnent pas sur OS X, mais qui peut être facilement résolu si vous êtes sur cette plate-forme (voir ci-dessous).
Installation
Installer greadlink (OS X uniquement):
a)
brew install coreutils
b) carte readlink à la nouvelle fonction (greadlink) en ajoutant ces lignes dans ~/.bashrc:
fonction readlink() { greadlink "$@"; }
export-f readlink`
Ajouter des start-script plugin dans ~/.sbt/plugins/build.sbt:
addSbtPlugin("com.typesafe.sbt" % "sbt-start-script" % "0.8.0")
Ajouter des start-tâche de script pour projet en cours:
$ sbt add-start-script-tasks
# exécuter à partir du répertoire où l'accumulation.sbt résideAjouter des start-prise en charge de script de génération en cours.sbt:
import com.typesafe.sbt.SbtStartScript
seq(SbtStartScript.startScriptForClassesSettings: _*)
Remarque la ligne vierge entre les déclarations (de rigueur pour SBT les fichiers de compilation).
Générer Script De Démarrage
Ensuite, chaque fois que vous voulez créer un script de démarrage de votre application, tels que la
sbt run-main
, mais sans sbt, exécuter:Exécuter
Voici ce que j'ai dans mon SBT (la version 0.10) de la définition du projet,
La
mklauncher
tâche crée un scripttarget/scala-sbt
qui exécutescala
avec le projet de chemin de classe déjà définie. Il serait agréable d'avoirmklauncher
exécuté automatiquement à chaque fois que le classpath changements, mais je n'ai pas regardé en faire encore.(J'utilise le chemin de classe Java, plutôt que de Scala, pour la facilité de création intégré interprètes.)
Le temps passe et beaucoup de choses ont changé depuis l'autre des réponses. Il est actuellement SBT
0.13.6
temps.Je pense que ce dont vous avez besoin est le sbt-onejar plugin ou le TRIBUNAL Indigène de l'Emballeur plugin.
sbt-onejar "est une simple accumulation de l'outil de plugin pour créer un seul fichier exécutable JAR contenant toutes vos code et les dépendances imbriquée en Bocaux."
SBT Natif de l'Emballeur's "l'objectif est d'être en mesure de s'emmitoufler logiciel de Scala, construit avec SBT natif pour les systèmes d'emballage, comme deb, rpm, homebrew, msi."
Viens de découvrir le tribunal script de démarrage du plugin: https://github.com/typesafehub/xsbt-start-script-plugin: