Jedną z opcji jest zdefiniowanie podprojektu dla każdego słoika, które mają być opublikowane. Niech twój główny projekt zależy od każdego. Daj każdemu podprojektowi odpowiednie name
, version
i oraz . Dla każdego podprojektu umieść jego słoik gdzieś nie na ścieżce klasy i spraw, aby wyjście o wartości packageBin
było tym słojem.
Na przykład (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
)
Takie podejście pozwala zmienić słoik w subA/bin/third-party.jar
i mają być stosowane bezpośrednio i późniejsza publishLocal
będzie go opublikować lokalnie.
Jeśli wolisz osobne publikowanie lokalnie, aby nie było częścią projektu, zdefiniuj subA
jako samodzielny projekt.
Czy istnieje sposób na opublikowanie wielu słoików? – hanxue
Otrzymuję "java.lang.RuntimeException: Repozytorium do publikacji nie jest określone" – Havnar
@Havnar Poprawnie, określając, gdzie publikować, nie jest uwzględniona w tej odpowiedzi. Na szczęście to jest łatwa część. – Marcin