2012-06-11 14 views
13

Hasta ahora he estado compilando mi proyecto Scala con SBT (a través de la pila Typesafe). Quiero ejecutar el código en varias máquinas ahora, a través de sbt-assembly. Siguiendo instrucciones, el único cambio que hice fue en mi archivo project/Build.scala. Aquí está la parte relacionada:Obteniendo sbt-assembly trabajando

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" 

Cuando corro sbt compile sin embargo, me sale este error:

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

¿Qué estoy haciendo mal?

Gracias!

EDITAR creado un archivo build.sbt en la misma carpeta que Build.scala (carpeta es /project/) y tiene estas dos líneas en ella:

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

Ahora el error es:

[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 

EDITAR 2 Hm, después de hacer un exitoso sbt compile, s ¿Debería simplemente ingresar a la consola sbt y escribir 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] 

EDITAR 3 JK consiguió. Tuve que agregar la información build.sbt como se especifica en el LÉAME de GitHub.

+0

"información como especificado en el GITHub README "- enlace por favor? – Vasily802

Respuesta

10

Hay dos puntos aquí. Una es que los complementos SBT no son solo dependencias de biblioteca, en particular, usan la versión SBT actual de forma similar a como lo hacen otras bibliotecas de Scala con la versión de Scala. La otra es que libraryDependencies en project/Build.scala afecta las dependencias para el proyecto , no para la compilación.

Una construcción completa de SBT es en sí misma un proyecto SBT, ubicado en un nivel en el árbol de directorios, por lo que puede tener una construcción propia configurada de la misma manera que una construcción normal. A diferencia de una compilación normal, donde es necesaria una "compilación completa" bajo un puñado de circunstancias, casi nunca hay una razón para usar una compilación completa para una compilación, por lo que el uso de los archivos .sbt ubicados en project/ es casi siempre suficiente.

El otro problema es el control de versiones. SBT tiene una función de utilidad llamada addSbtPlugin que maneja todo para usted. Toma un moduleID y agrega toda la información necesaria de versiones de SBT y Scala.

Por lo tanto, para obtener SBT-ensamblaje de trabajo en una construcción completa, se crea un archivo .sbt en menos de project/ (convencionalmente ya sea project/build.sbt o project/plugins.sbt) y colocar resolutores y dependencias de su construcción no:

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

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

¿Cuál es el formato de los argumentos para 'addSbtPlugin'? ¿Qué haría por 'sbt-assembly'? – adelbertc

+0

'addSbtPlugin (" com.eed3si9n "%" sbt-assembly "%" 0.8.3 ")', por lo que la parte de su build.scala que trata con la configuración debe verse así: Seq [Setting [_]] (resolvers + = ..., resolvers + = ..., addSbtPlugin (...)) ' –

+0

En realidad, de repente se me ocurre que podría estar colocándolo en el archivo equivocado por completo. Si esto es project/Build.scala, ponerlo allí no servirá para nada (declarará que su _source code_ depende de sbt-assembly, no del proyecto). Para hacer que el proyecto lo use, ponga la configuración en project/build.sbt o project/project/Build.scala (preferiblemente el primero, ya que casi nunca hay un razón para usar una compilación completa para la metacompilación del proyecto). –

Cuestiones relacionadas