【发布时间】:2014-01-11 21:26:57
【问题描述】:
我在 SBT 中有一个多项目构建配置,它由两个不同的模块组成, 彼此不依赖。它们只是(恰好)属于同一个产品。
项目布局如下:
myLib
+ build.sbt
+ myProject_1
| + build.sbt
| + src
| + ...
+ myProject_2
| + build.sbt
| + src
| + ...
+ project
+ Build.scala
project/Build.scala 包含常用设置,如下所示:
import sbt._
import Keys._
object ApplicationBuild extends Build {
val appVersion = "1.0-SNAPSHOT"
val defaultScalacOptions = Seq(
"-unchecked", "-deprecation", "-feature", "-language:reflectiveCalls",
"-language:implicitConversions", "-language:postfixOps",
"-language:dynamics", "-language:higherKinds", "-language:existentials",
"-language:experimental.macros", "-Xmax-classfile-name", "140")
val defaultResolvers = Seq(
"Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"
)
val defaultLibraryDependencies = Seq(
"org.specs2" %% "specs2" % "1.14" % "test",
"org.slf4j" % "slf4j-nop" % "1.7.5" % "test"
)
val defaultSettings = Defaults.defaultSettings ++ Seq(
scalacOptions ++= defaultScalacOptions,
resolvers ++= defaultResolvers,
libraryDependencies ++= defaultLibraryDependencies
)
}
只需要将根构建文件 build.sbt 放在一起[我也尝试将其删除.. 但随后子项目不再编译]:
lazy val myProject_1 = project.in(file("myProject_1"))
lazy val myProject_2 = project.in(file("myProject_2"))
最后是 myProject_1/build.sbt [我刚刚省略了 myProject_2/build.sbt,因为它非常相似并且没有为主题]:
name := "myProject_1"
version := ApplicationBuild.appVersion
ApplicationBuild.defaultSettings
libraryDependencies ++= Seq(
"commons-codec" % "commons-codec" % "1.8"
)
项目编译成功...但是当我发出命令sbt package时,在根目标目录中生成了一个空jar:
j3d@gonzo:~/myLib/$ ll target/scala-2.10
drwxrwxr-x 2 j3d j3d 4096 Dez 23 17:13 ./
drwxrwxr-x 5 j3d j3d 4096 Dez 23 17:13 ../
-rw-rw-r-- 1 j3d j3d 273 Dez 23 17:13 brix_2.10-0.1-SNAPSHOT.jar
我错过了什么吗?如何防止 SBT 生成这个空无用的 jar?
【问题讨论】: