J'ai une bibliothèque compilée dans un jar (pas un projet sbt, pas de code source, juste le fichier jar) qui n'est pas disponible sur un référentiel.
Existe-t-il un moyen de publier le pot localement afin que je puisse ajouter la dépendance en utilisant le libraryDependencies += "org.xxx" % "xxx" % "1.0"
notation? (Je sais déjà comment ajouter le fichier à un projet en le copiant dans le dossier lib
.)
L'action ** publishLocal ** est utilisée pour publier votre projet dans un référentiel Ivy local. Par défaut, ce référentiel local se trouve dans $ {user.home} /. Ivy2/local. Vous pouvez ensuite utiliser ce projet à partir d'autres projets sur la même machine source
EDIT: Désolé d'avoir mal lu votre question. Voici un exemple pour publier un pot ou des sources dans votre dépôt de lierre local.
tl; dr J'appellerais ça un truc pas une caractéristique de sbt. Tu as été prévenu.
Disons que vous avez file.jar
de publier. Comme pour tout outil de construction , y compris sbt, c'est pour exécuter des tâches qui finissent par créer un artefact - un fichier jar dans la plupart des cas - à partir des fichiers de un projet.
Le projet définit les coordonnées de l'artefact.
L'astuce consiste à tirer parti de ce dont sbt a besoin pour configurer l'environnement (= les coordonnées ) pour que le pot soit publié (sinon vous devrez les spécifier sur la ligne de commande qui peut ou non être très convivial).
Créer un build.sbt
avec les paramètres nécessaires - organization
, name
, version
et éventuellement scalaVersion
- et enregistrez-le où se trouve le fichier jar.
organization := "org.abc"
name := "my-own-publish-jar"
version := "1.0.0"
scalaVersion := "2.11.3"
packageBin in Compile := file(s"${name.value}_${scalaBinaryVersion.value}.jar")
Vous l'avez peut-être remarqué, la construction change compile:package
tâche pour pointer vers le fichier jar.
C'est ça.
Exécutez sbt publishLocal
et le fichier jar doit se trouver dans le référentiel local Ivy2, c'est-à-dire ~/.ivy2/local/org.abc/my-own-publish-jar_2.11/1.0.0/jars/my-own-publish-jar_2.11.jar
.
protip Écrire un plugin pour le faire avec les coordonnées spécifiées sur la ligne de commande devrait être assez facile maintenant.
Disons que vous avez wetElephant.jar
et wetElephant-javadoc.jar
archive une bibliothèque tierce et des javadocs correspondants que vous souhaitez publier dans votre référentiel local et les référencer depuis un autre projet en utilisant libraryDependencies
sbt taskKey.
Voici ce que vous devez faire.
wetElephant.jar
et wetElephant-javadoc.jar
) dans modules\wetElephant
Définissez le projet dans votre fichier build.sbt (ou Build.scala)
lazy val stolenLib = project
.in(file("modules/wetElephant"))
.settings(
organization := "com.stolenLibs",
name := "wetElephant",
version := "0.1-IDonKnow",
crossPaths := false, //don't add scala version to this artifacts in repo
publishMavenStyle := true,
autoScalaLibrary := false, //don't attach scala libs as dependencies
description := "project for publishing dependency to maven repo, use 'sbt publishLocal' to install it",
packageBin in Compile := baseDirectory.value / s"${name.value}.jar",
packageDoc in Compile := baseDirectory.value / s"${name.value}-javadoc.jar"
)
Appelez la tâche publishLocal
depuis sbt/activator (je l'ai fait depuis activator et l'ai préfixé avec le nom du projet):
./activator wetElephant/publishLocal
... et lisez le résultat pour voir quoi et où a été publié:
/cygdrive/d/devstation-workspace/projects/m4l-patches 1
[info] Loading project definition from D:\devstation-workspace\projects\m4l-patches\project
[info] Set current project to m4l-patches (in build file:/D:/devstation-workspace/projects/m4l-patches/)
[info] Updating {file:/D:/devstation-workspace/projects/m4l-patches/}wetElephant...
[info] Packaging D:\devstation-workspace\projects\m4l-patches\modules\wetElephant\target\wetelephant-0.1-IDonKnow-sources.jar ...
[info] Done packaging.
[info] Wrote D:\devstation-workspace\projects\m4l-patches\modules\wetElephant\target\wetelephant-0.1-IDonKnow.pom
[info] Resolving org.fusesource.jansi#jansi;1.4 ...4 ....
[info] Done updating.
[info] :: delivering :: com.stolenLibs#wetelephant;0.1-IDonKnow :: 0.1-IDonKnow :: release :: Sun Dec 20 20:09:24 CET 2015
[info] delivering ivy file to D:\devstation-workspace\projects\m4l-patches\modules\wetElephant\target\ivy-0.1-IDonKnow.xml
[info] published wetelephant to C:\Users\pawell\.ivy2\local\com.stolenLibs\wetelephant\0.1-IDonKnow\poms\wetelephant.pom
[info] published wetelephant to C:\Users\pawell\.ivy2\local\com.stolenLibs\wetelephant\0.1-IDonKnow\jars\wetelephant.jar
[info] published wetelephant to C:\Users\pawell\.ivy2\local\com.stolenLibs\wetelephant\0.1-IDonKnow\srcs\wetelephant-sources.jar
[info] published wetelephant to C:\Users\pawell\.ivy2\local\com.stolenLibs\wetelephant\0.1-IDonKnow\docs\wetelephant-javadoc.jar
[info] published ivy to C:\Users\pawell\.ivy2\local\com.stolenLibs\wetelephant\0.1-IDonKnow\ivys\ivy.xml
[success] Total time: 1 s, completed 2015-12-20 20:09:24
Utiliser éventuellement ces bibliothèques dans un autre projet
libraryDependencies += "com.stolenLibs" % "wetElephant" % "0.1-IDontKnow"
Avertissement: je ne sais pas comment ne pas publier de sources ...
Voici un article de blog que j'ai suivi pour pousser l'artefact sbt vers un référentiel Maven (local et distant) il y a quelques mois.