2
我正在使用sbt構建多模塊項目。其中一個模塊是一個使用npm構建的JavaScript應用程序。我想簡單地通過shell腳本執行npm作爲包任務的一部分,並使用生成的輸出文件作爲該模塊的工件。我能夠運行shell命令作爲程序包任務的一部分,但由於某些原因,當我運行publish或publishLocal時,將忽略此任務。如何在多模塊項目中通過sbt調用npm
附加的是我的Build.scala。
這是accounts-ui項目,應該使用npm構建。現在,實際的npm構建由一個簡單的腳本表示。
import sbt._
import Keys._
import play.Play.autoImport._
import PlayKeys._
import play.PlayScala
import sbtassembly._
import AssemblyKeys._
import net.virtualvoid.sbt.graph.Plugin.graphSettings
import ohnosequences.sbt.SbtS3Resolver.autoImport._
object Build extends Build {
lazy val commonSettings = Seq(
organization := "myorg",
scalaVersion := "2.11.5"
)
lazy val publishSettings = Seq(
publishTo := {
val prefix = if (isSnapshot.value) "snapshots" else "releases"
Some(s3resolver.value("MyOrg " + prefix + " S3 bucket", s3(prefix+".repo.myorg.com")))
}
)
lazy val root = Project(id = "root", base = file(".")).settings(commonSettings).settings(
name := "accounts-root"
).settings(publishSettings).aggregate(api, ui)
val _apiName = "accounts-api"
lazy val api = Project(id = "api", base = file("./api")).settings(commonSettings).settings(
name := "accounts-api",
libraryDependencies ++= Seq(
specs2
)
).settings(publishSettings).settings(graphSettings).settings(
mainClass in assembly := Some("play.core.server.NettyServer"),
fullClasspath in assembly += Attributed.blank(PlayKeys.playPackageAssets.value),
test in assembly := {},
assemblyExcludedJars in assembly := {
val cp = (fullClasspath in assembly).value
cp filter { (el) => {
val name = el.data.getName
name.contains("mockito") || name.contains("commons-logging") || name.contains("specs2")
}
}
}
).settings(addArtifact(Artifact(_apiName, "assembly"), assembly)
).enablePlugins(PlayScala)
val npmBuildTask = taskKey[Unit]("some custom task")
lazy val ui = Project(id = "ui", base = file("./ui")).settings(commonSettings).settings(
name := "accounts-ui",
npmBuildTask := {
val processBuilder = Process("npm-build.sh")
val process = processBuilder.run()
if(process.exitValue() != 0)
throw new Error(s"custom task failed with exit value ${process.exitValue()}")
},
Keys.`package` <<= (Keys.`package` in Compile) dependsOn npmBuildTask
).settings(publishSettings)
}