2014-05-14 7 views
8

Oggi ho integrato sbt-native-packager nel mio progetto scala, principalmente per generare utili script e/o pacchetti di esecuzione.Perché sbt-native-packager non genera alcuna directory bin?

Ora, ho aggiunto al mio build.sbt linea:

packageArchetype.java_application 

e alla mia plugins.sbt

resolvers += "sbt-plugins" at "http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases" 

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "0.7.0-RC2") 

quando invoco sbt stage ho la directory target/universal/stage, ma c'è solo lib lì, non bin con script (che secondo http://www.scala-sbt.org/sbt-native-packager/GettingStartedApplications/MyFirstProject.html devono essere creati).

Devo aggiungere qualcos'altro per ottenere la directory bin con gli script?

+0

Mi sono avvicinato a questa domanda mentre cercavo come distribuire un'app Lagom. La risposta per la distribuzione di un'app Lagom è qui: https://stackoverflow.com/questions/27858758/scala-sbt-assembly-no-main-manifest-attribute/45368662#45368662 –

risposta

16

Il problema era che nel mio progetto avevo più clases principali. In build.sbt ho avuto:

Keys.mainClass in (Compile, run) := Some("Rest") 

che dovrebbe essere

Keys.mainClass in (Compile) := Some("Rest") 

e ora funziona perfettamente.

+3

Questa è una buona soluzione, grazie. Ho aggiunto la [libreria jdom] (http://jdom.org/), che ha le classi principali, al mio progetto e ho ottenuto questa misteriosa rottura. Un avvertimento di 'sbt-native-packager' sarebbe un bel tocco. –

+1

Ho dovuto aggiungere l'ambito 'Compile' per la chiave' mainClass' per generare lo script bin nel progetto 'packageArchetype.java_server' –

+0

Ho avuto anche questo problema; definito 'mainClass in (Compile, run): = Alcuni (" pippo ")' invece di 'mainClass in (Compile): = Alcuni (" pippo ")'. Questo comportamento SBT previsto dallo standard è simile a un errore in sbt-native-packager? – metasim

1

Nota a margine, la modifica della configurazione di mainClass influisce sull'esecuzione in-sbt dell'applicazione. Per configurare il vostro costruire sia per eseguire l'applicazione in SBT (ad esempio durante lo sviluppo), così come creare pacchetti, avrete bisogno di 2 definizioni mainClass (in build.sbt):

mainClass in Compile := Some("MyBootKernel") 

mainClass in (Compile, run) := Some("MyApp") 

Dove le 2 classi principali sono:

class MyBootKernel extends Bootable { 
    def startup = { MyApp.main(Array()) } 
    def shutdown = {} 
} 

e

object MyApp extends App { 
    // initialize application. 
} 

lo script di avvio nella directory bin passa la classe principale applicazione per Akka microkernel, che deve estendersi avviabile (che poi inizializza l'app), mentre in esecuzione da sbt direttamente non ha bisogno di roba di avvio (ad es. solo l'App direttamente).

Problemi correlati