Mon projet dépend d'un pot externe. J'ai créé un répertoire lib
et y ai copié le fichier jar. C'est mon build.sbt
:
name := "approxstrmatch"
version := "1.0"
scalaVersion := "2.10.4"
unmanagedJars in Compile += file("lib/secondstring-20140729.jar")
libraryDependencies+="org.Apache.spark"%%"spark-core"%"1.0.0"
resolvers += "AkkaRepository" at "http://repo.akka.io/releases/"
Lorsque j'exécute clean
et package
, le fichier JAR externe n'est pas inclus dans le fichier JAR généré. Pourquoi?
Voici la structure du projet:
project/build.sbt
lib/
src/.....
Tout d’abord, il n’est pas nécessaire de spécifier explicitement unmanagedJars
à moins que votre configuration ne soit plus complexe. Placez simplement vos fichiers JAR dans le répertoire lib
et ils seront ajoutés au chemin de classe ( docs ).
Pour conditionner un fichier JAR exécutable avec toutes les dépendances nécessaires, utilisez l’un des plug-ins SBT: sbt-onejar ou sbt-Assembly . package
emballe simplement vos classes dans un fichier jar et ne se soucie pas d'inclure des dépendances.
Les instructions dans la documentation des plugins doivent être faciles à vous guider pour les utiliser.
Essaye ça
libraryDependencies += "com.acme.common" % "commonclass" % "1.0" from "file:///Users/bwong/git/perf-tools/commonclass/target/scala-2.11/commonclass_2.11-1.0.jar"
Je "paquet sbt" le classproject commun et puis ajoute juste cette dépendance de bibliothèque dans mon build.sbt dans les projets dépendants.
Merci à http://flummox-engineering.blogspot.com/2014/06/sbt-use-jar-file-for-librarydependencies.html pour ce hack.
L'astuce consiste à déterminer le répertoire lib
dans lequel placer votre fichier JAR. Pour ce faire, exécutez les opérations suivantes dans votre console sbt: show unmanagedBase
.
Si vous ne voyez pas votre projet à cet endroit, vous pouvez exécuter show YOURPROJECT/unmanagedBase
pour trouver le chemin correct lib
.
Ajoutez cette ligne à votre build.sbt et nettoyez et compilez votre projet.
project/libs, où projet est le répertoire racine de votre projet, placez vos fichiers JAR dans le dossier libs.
unmanagedBase <<= baseDirectory { base => base / "libs" }
tl; dr Déplacez project/build.sbt
d'un niveau supérieur où se trouve le répertoire lib
et utilisez sbt-Assembly plugin (comme décrit dans l'autre réponse de Aleksey ).
Si la disposition du répertoire de projet est identique à celle que vous utilisez pour votre projet, elle est incorrecte car build.sbt
n'appartient pas à la même construction que lib
.
Puisque sbt est récursif this project/build.sbt
décrit la construction du projet qui gouverne celle principale. Citant les docs :
Le répertoire du projet est un autre projet dans votre projet qui sait comment construire votre projet. Le projet à l'intérieur du projet peut (en théorie.) Faire tout ce qu'un projet peut faire. Votre définition de construction est un projet sbt.
Et les tortues descendent complètement. Si vous le souhaitez, vous pouvez modifier le construire la définition du projet de définition de construction, en créant un projet/projet/répertoire.
une des solutions est, lorsque vous construisez ce fichier dans sbt, faites sbt publish-local