Come rendere il compito di compilazione SCALATRA dipende da Scala.js Packagejs Task in SBT?
Domanda
Ho un progetto Scalatra entro il quale voglio servire JavaScript che è stato generato da un progetto Scala.js.
Ho una build SBT multi-progetto che mi consente di costruire con successo questo progetto. Cioè, posso utilizzare le attività di compilazione (e run) nel progetto Scalatra;E posso usare l'attività dei pacchetti nel progetto Scala.js.
Tuttavia, mi piacerebbe molto essere in grado di avere il compito di compilazione Scalatra dipende dal compito di Scala.js Packagejs;Quindi, quando il progetto Scalatra è compilato, il JavaScript viene generato automaticamente nel progetto SCALA.JS.
Nel mio file build.sbt multi-progetto che ho provato:
lazy val wwwjs = project // Scala.js project
lazy val www = project // Scalatra project
.dependsOn(wwwjs % "compile->packageJS")
.
Ma quando si compila il progetto Scalatra questo fallisce con "Configurazione non trovata in wwwjs # wwwjs_2.10; 0.1: 'packagejs'. È stato richiesto da www # www_2.10; 0,1 compilazione".
Sono abbastanza nuovo a SBT (e Scaratra e Scala.js!) - Qualcuno può illuminarmi su come fare questo?
Grazie :)
Soluzione
Quello che vuoi qui non è una dipendenza tra progetti (che è ciò che dependsOn
su un progetto) ma tra tasks
.
Non ho familiarità con Scatratra, ma per il lato SBT dovrebbe essere estremamente simile a giocare, e abbiamo un modello di successo per i progetti di gioco con Scala.js qui: https://github.com/vmunier/play-with-scalajs-esempio / blob / master / progetto / build.scala
In particolare, derivo il seguente adattamento di base dalla tua build sopra:
import scala.scalajs.sbtplugin.ScalaJSPlugin._ // if Build.scala
import ScalaJSKeys._
lazy val wwwjs = project // Scala.js project
lazy val www = project // Scalatra project
.settings(
compile in Compile <<= (compile in Compile) dependsOn (fastOptJS in (wwwjs, Compile))
)
.
In alternativa, utilizzare fullOptJS
invece di fastOptJS
per la versione completamente ottimizzata (ma richiede diversi secondi per ricostruire ogni volta che si cambia).