2013-10-10 12 views
5

Hallo Ich habe 5 Jar-Dateien und habe versucht, sie in einem lokalen Repository mit sbt zu veröffentlichen. Aber wenn ich sie in unmagedBase Verzeichnis wie lib/ platziere, werden sie nicht mit publishLocal kopiert. Gibt es eine einfache Möglichkeit, sie in den Veröffentlichungsprozess einzubeziehen?Veröffentlichen von JAR-Dateien mit sbt (3rd Party)

Derzeit Maven hat eine ähnliche Lösung hier: http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html

Antwort

4

Eine Option ist ein Teilprojekt für jedes Glas zu definieren, die Sie veröffentlicht werden sollen. Haben Sie Ihr Hauptprojekt von jedem abhängen. Geben Sie jedem Teilprojekt eine geeignete name, version und organization. Stellen Sie für jedes Teilprojekt seinen jar irgendwo nicht auf den Klassenpfad und machen Sie die Ausgabe von packageBin, dass jar.

Zum Beispiel (sbt 0,13 build.sbt),

lazy val main = project.dependsOn(subA) 

lazy val subA = project.settings(
    name := "third-party", 
    organization := "org.example", 
    version := "1.4", 
    packageBin in Compile := baseDirectory.value/"bin"/"third-party.jar", 
    // if there aren't doc/src jars use the following to 
    // avoid publishing empty jars locally 
    // otherwise, define packageDoc/packageSrc like packageBin 
    publishArtifact in packageDoc := false, 
    publishArtifact in packageSrc := false, 
    // tell sbt to put the jar on main's classpath 
    // and not the (empty) class directory 
    exportJars := true, 
    // set this to not add _<scalaBinaryVersion> to the name 
    crossPaths := true 
) 

Dieser Ansatz ermöglicht es Ihnen, das Glas in subA/bin/third-party.jar zu ändern und haben es sofort und eine nachfolgende publishLocal verwendet werden, wird es lokal veröffentlichen.

Wenn Sie es lieber lokal veröffentlichen möchten, damit es nicht Teil des Projekts ist, definieren Sie stattdessen subA als eigenständiges Projekt.

+0

Gibt es eine Möglichkeit, mehrere Gläser zu veröffentlichen? – hanxue

+0

Ich erhalte 'java.lang.RuntimeException: Repository für die Veröffentlichung wurde nicht angegeben' – Havnar

+0

@Havnar Korrekt, definiert, wo zu veröffentlichen ist nicht in dieser Antwort abgedeckt. Zum Glück ist das der einfache Teil. – Marcin

Verwandte Themen