2012-06-11 18 views
13

Quindi finora ho compilato il mio progetto Scala con SBT (tramite stack Typesafe). Voglio eseguire il codice su più macchine ora, tramite sbt-assembly. Seguendo le indicazioni, l'unica modifica che ho apportato era nel mio file project/Build.scala. Ecco la parte relativa:Funzionamento sbt-assembly

resolvers += "Typesafe Releases" at "http://repo.typesafe.com/typesafe/releases", 
resolvers += "artifactory" at "http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases", 
libraryDependencies += "com.eed3si9n" % "sbt-assembly" % "0.8.3" 

Quando eseguo sbt compile tuttavia, ottengo questo errore:

sbt.ResolveException: unresolved dependency: com.eed3si9n#sbt-assembly/scala_2.9.1/sbt_0.11.2;0.8.3: not found.

Cosa sto sbagliando?

Grazie!

EDIT Creato un file build.sbt nella stessa cartella come Build.scala (cartella è /project/) e hanno queste due linee in esso:

Seq[Setting[_]](resolvers += "artifactory" at "http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases", 
       addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.8.3")) 

Ora l'errore è:

[warn] :::::::::::::::::::::::::::::::::::::::::::::: 
[warn] ::   UNRESOLVED DEPENDENCIES   :: 
[warn] :::::::::::::::::::::::::::::::::::::::::::::: 
[warn] :: com.eed3si9n#sbt-assembly;0.8.3: not found 
[warn] :::::::::::::::::::::::::::::::::::::::::::::: 
[warn] 
[warn] Note: Some unresolved dependencies have extra attributes. Check that these dependencies exist with the requested attributes. 
[warn]  com.eed3si9n:sbt-assembly:0.8.3 (sbtVersion=0.11.2, scalaVersion=2.9.1) 
[warn] 
[error] {file:/Users/myname/current/projectname/project/}default-d7da9a/*:update: sbt.ResolveException: unresolved dependency: com.eed3si9n#sbt-assembly;0.8.3: not found 

EDIT 2 Hm, dopo aver eseguito correttamente sbt compile, s dovrei essere in grado di accedere alla console sbt e digitare assembly?

> assembly 
[error] Not a valid command: assembly 
[error] Not a valid project ID: assembly 
[error] Not a valid configuration: assembly 
[error] Not a valid key: assembly 
[error] assembly 
[error] 

EDIT 3 JK ottenuto. Dovevo aggiungere le informazioni build.sbt come specificato nel README GitHub.

+0

"informazioni come specificato nel README di GitHub "- collegamento per favore? – Vasily802

risposta

10

Ci sono due punti qui. Uno è che i plug-in SBT non sono solo le dipendenze della libreria - in particolare, usano la versione SBT corrente in modo simile alle altre librerie Scala che usano la versione di Scala. L'altro è che in project/Build.scala influisce sulle dipendenze per il progetto , non per .

Una build completa di SBT è essa stessa un progetto SBT, situato appena a un livello in basso nell'albero delle directory, e quindi può avere una configurazione propria configurata allo stesso modo di una build normale. A differenza di una build normale, in cui è necessaria una "full build" in una serie di circostanze, non c'è quasi mai un motivo per utilizzare una build completa per una build, quindi l'utilizzo dei file .sbt in project/ è quasi sempre sufficiente.

L'altro problema è il controllo delle versioni. SBT ha una funzione di utilità chiamata addSbtPlugin che gestisce tutto per te. Richiede un moduleID e aggiunge tutte le informazioni sul versionamento SBT e Scala necessarie.

Quindi, per ottenere SBT-assemblaggio a lavorare in una generazione completa, si crea un file .sbt meno project/ (convenzionalmente sia project/build.sbt o project/plugins.sbt) e posizionare risolutori e le dipendenze del costruire lì:

resolvers += Resolver.url("artifactory", url("http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases"))(Resolver.ivyStylePatterns) 

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.8.3") 
+0

Qual è il formato degli argomenti di 'addSbtPlugin'? Cosa farei per 'sbt-assembly'? – adelbertc

+0

'addSbtPlugin (" com.eed3si9n "%" sbt-assembly "%" 0.8.3 ")', quindi la parte del tuo build.scala che si occupa delle impostazioni dovrebbe essere simile a: Seq [Impostazione [_]] (resolver + = ..., resolver + = ..., addSbtPlugin (...)) ' –

+0

In realtà, mi viene in mente all'improvviso che potresti inserirla nel file sbagliato. Se si tratta di progetto/Build.scala, inserirla non funzionerà affatto (dichiarerà che your_source codice_ dipende da sbt-assembly, non dal progetto). Per far sì che il progetto lo usi, metti le impostazioni sia in project/build.sbt che in project/project/Build.scala (preferibilmente il primo, poiché non c'è quasi mai un motivo per usare una compilazione completa per la meta-costruzione del progetto) –