Ho un progetto sbt con una moltitudine di sottoprogetti e dipendenze di librerie esterne. build.sbt
va in questo modo:Come utilizzare il packager nativo di sbt con i sottoprogetti (sbt 0.13)
val extlib1 = "xy.xxx" % "lib1" % "1.0+"
val extlib2 = "xy.yyy" % "lib2" % "1.0+"
val extlib3 = "xy.zzz" % "lib3" % "1.0+"
lazy val core=project settings (
name:="cor",
libraryDependencies++=Seq(extlib1)
)
lazy val servercore=project settings (
name:="srvcore",
libraryDependencies++=Seq(extlib1,extlib2)
) dependsOn(core)
lazy val masterserver=project settings (
name:="mastersrv",
mainClass:=Some("masterserver")
) dependsOn(servercore)
lazy val otherserver=project settings (
name:="othersrv",
libraryDependencies++=Seq(extlib3),
mainClass:=Some("otherserver")
) dependsOn(servercore)
// Only for aggregating the builds of the subprojects
lazy val root=project in file(".") settings(name:="proj") aggregate(
core,servercore,masterserver,otherserver
)
Quindi in realtà il progetto crea diversi programmi ("Masterserver", "otherserver") che dipendono da librerie esterne e un sottoinsieme dei sottoprogetti di questo progetto stesso.
Quello che voglio avere è un set completo di JAR necessari per avviare il server master o l'altro server, separati per ogni. Quindi, mi piacerebbe avere ad es. masterserver/target/<whatever>
contenente
mastersrv.jar
srvcore.jar (needed by mastersrv.jar)
cor.jar (needed by srvcore.jar)
lib1.jar (needed by mastersrv and srvcore)
lib2.jar (needed by srvcore)
<whatever>.jar (further libs needed by lib1 or lib2)
e un otherserver/target/<whatever>
con contenuti simili (avrebbe dovuto aggiungere lib3.jar
anche, come ciò che è necessario per othersrv.jar
.
Come farlo? È possibile eseguire questo con il packager nativa? Emissione stage
nel progetto principale non fa nulla (perché non c'è mailClass
?). l'emissione di masterserver/state
dà un messaggio di errore
> masterserver/stage
[error] No such setting/task
[error] masterserver/stage
[error] ^
I mu Devo ammettere che non ho una vera idea della documentazione del plugin packager nativo. Come posso archiviare ciò che voglio avere?
Modifica: Naturalmente, non sono legato alle directory. Se ottengo più file ZIP nella directory principale target
, è o.k., anche. Voglio solo avere tutte le dipendenze di un sottoprogetto in una posizione.
Modifica 2: Ok, ho imparato che il gioco! quadro fa esattamente quello che voglio. E usa il packager nativo di sbt per questo. Come posso ottenere una confezione universale ricorsiva di sottoprogetti in progetti non gestiti da sbt-hand che usano Java come linguaggio di programmazione?
Grazie per l'auto-risposta. L'ho trovato abbastanza utile :) – opyate
Probabilmente questa risposta dovrebbe essere aggiornata per riflettere l'uso della funzione sbt 'AutoPlugin' utilizzata nella riga 1.x di' sbt-native-packager'. – metasim
Beh, in effetti, la risposta ora ha più di due anni. Sfortunatamente, non abbiamo modificato o aggiornato le nostre toolchain da allora, quindi devo ammettere che non ho esperienza con AutoPlugin. :-( –