Sono nuovo di sbt. Voglio che metta tutte le moschette del barattolo delle dipendenze e il mio file jar in un unico posto. SBT eseguirà l'app, ma ho varie dipendenze sparse in giro e una cartella .ivy piena di cose il mio file jar dipende indirettamente. Quindi c'è un semplice comando per copiarli tutti in un unico posto in modo che io possa distribuirlo su un'altra macchina?come faccio a ottenere sbt per raccogliere tutti i file jar in cui il mio codice dipende da un unico punto?
risposta
ci sono molti plugin è possibile utilizzare: sbt-assembly, sbt-proguard, sbt-onejar, xitrum-package ecc
Vedere la list of SBT plugins.
Quali sono le differenze? – lony
Creare un'attività nel file di build in questo modo:
lazy val copyDependencies = TaskKey[Unit]("pack")
def copyDepTask = copyDependencies <<= (update, crossTarget, scalaVersion) map {
(updateReport, out, scalaVer) =>
updateReport.allFiles foreach {
srcPath =>
val destPath = out/"lib"/srcPath.getName
IO.copyFile(srcPath, destPath, preserveLastModified = true)
}
}
aggiungere l'attività a un progetto come questo:
lazy val HubSensors =
Project("HubSensors", file("HubSensors"), settings = shared ++ Seq(
copyDepTask,
resolvers ++= Seq(novusRels),
libraryDependencies ++= Seq(
jodatime
)
)) dependsOn(HubCameraVision, JamServiceProxy, HubDAL)
Nel tipo di console SBT:
project [Project Name]
pack
Vedo due difficoltà in questo approccio, in particolare con i progetti di grandi dimensioni: 1. L'esecuzione di _update_ su più progetti con interdipendenze finisce per copiare lo stesso file .jar più di una volta; 2. Si può avere la stessa dipendenza ma con versioni distinte copiate. Ciò accade in generale con le librerie popolari, come log4j e apache-commons, perché lo stesso artefatto è referenziato in modo transitorio da più dipendenze. Vedere l'attività '' sfrattato'' per ulteriori informazioni. Si può fare qualcosa come (pseudo codice) "allFiles - sfrattati", ma è tutt'altro che banale. Dovrai immergerti in profondità nell'API SBT. –
Ma, per i piccoli progetti, il tuo approccio sarebbe perfetto. –
La documentazione SBT hanno un list of "One Jar Plugins":
- SBT-assemblaggio: https://github.com/sbt/sbt-assembly
- xsbt-Proguard-plugin: https://github.com/adamw/xsbt-proguard-plugin
- SBT da implementare: https://github.com/reaktor/sbt-deploy
- SBT-appbundle (os x standalone): https://github.com/sbt/sbt-appbundle
- sbt-onejar (Imballa il tuo progetto utilizzando One-JAR ™): https://github.com/sbt/sbt-onejar
Try sbt-pack plug https://github.com/xerial/sbt-pack, che raccoglie tutti i barattoli dipendenti nella cartella di destinazione/pack e anche genera script di lancio.
Mi sono appena trasferito da sbt-onejar a sbt-pack e devo dire che è molto bello: veloce, facile da usare e affidabile. –
Si potrebbe anche provare SBT Native Packager: https://github.com/sbt/sbt-native-packager (SBT 0.7+)
Questo è ancora un WIP, ma sarà utilizzato in Play Framework 2.2 nelle prossime settimane. Con questo, è possibile creare file ZIP standalone, pacchetti Debian (DEB), pacchetti di installazione di Windows (MSI), DMG, RPM e così via.
Per aiutare un po 'di più, con sbt-native-packager installato, si farebbe 'sbt stage' per ottenere i file in' target/universal/stage' – akauppi
maggio si cerca di questo plugin SBT: https://github.com/anvie/sbt-onedir-plugin
Aggiungere la seguente riga al file build.sbt
.
retrieveManaged := true
Questo raccoglierà le dipendenze a livello locale
Grazie per il suggerimento. Come lo sapevi - c'è un link alla documentazione di 0.13.13 sbt (non ho trovato). Funziona - 'sbt compile' raccoglie le dipendenze sotto' lib_unmanaged/'. – akauppi
Menzionato in http://www.scala-sbt.org/0.13/docs/Faq.html#Where+has+0.7%E2%80%99s++gone%3F – akauppi
Grazie mille, mi piace questo approccio, don Voglio creare un plugin per la differenza. Tuttavia, sembra che retrieveManaged non ottenga la dipendenza dalla libreria java che è gestita da Maven, se esiste una soluzione al riguardo? – carfield
- 1. Come impedire a sbt-native-packager di mettere le mie risorse in un file jar?
- 2. come faccio a ottenere Ruby FileList per raccogliere file senza nome, come .htaccess su windows
- 3. Come creare un file jar da scala
- 4. SBT: classe Exclude da Jar
- 5. come riferimento tutti i file JAR in una directory nel mio file batch
- 6. Come posso raccogliere i report di copertura del codice TeamCity da più progetti in un unico report?
- 7. Grails: come raccogliere tutti i messaggi
- 8. Come configurare Visual Studio per combinare tutti i file TypeScript in un unico file JavaScript?
- 9. codice Java per creare un file JAR
- 10. Come proteggere un file Jar da decompilare?
- 11. Come visualizzare il codice sorgente all'interno di un file JAR?
- 12. Come faccio a usare il mio codice sml?
- 13. Regola Makefile che dipende da tutti i file in una directory (inclusa nelle sottodirectory)
- 14. ant per rimuovere file da un jar
- 15. C# ottenere tutti i colori da colori
- 16. pubblica file jar con sbt (3rd party)
- 17. Come faccio a raggruppare le importazioni dei pacchetti in un unico pacchetto personalizzato?
- 18. sbt-assembly: come collegare il jar delle dipendenze con il jar principale?
- 19. Ruby: come faccio a passare tutti i parametri e i blocchi ricevuti da un metodo all'altro?
- 20. Definizioni di dattiloscritto di riferimento in un unico file, invece di tutti i file JS?
- 21. Come faccio a unire tutti i casi in Uno?
- 22. Come ottenere le firme del metodo da un file jar?
- 23. Come ottenere tutti i processi in un display da Xvfb?
- 24. Come ottenere tutti i commenti da Disqus?
- 25. come faccio ad ottenere un file batch per accettare l'input da un file txt?
- 26. plug-in sbt che dipende da se stesso per creare se stesso
- 27. Come elenco i file all'interno di un file JAR?
- 28. Qualche idea per cui il mio codice C non può leggere da/proc?
- 29. Come faccio a mostrare quante righe di codice il mio progetto contiene in Visual Studio?
- 30. Come faccio a ottenere il mio pulsante HTML per eliminare l'elemento dell'elenco corretto da un database SQLite?
Sì, questo è vero e proprio dolore. Forse mi sono perso qualcosa ma davvero non capisco perché questa non è una parte di _Simple_ Build Tool –
@AlexPovar: Suppongo che ci siano così tanti modi per farlo che sceglierne uno e standardizzarlo potrebbe essere dannoso (ma sono d'accordo) . –