![](/img/trans.png)
[英]Sbt Multi-Module - using some project as module in another project
[英]Publish Local generates empty jar in a multi-module SBT project
當我在某些模塊上執行 publishLocal 時,它可以工作,但是對於一個模塊,它會生成只有META-INF/Manifest.MF
空 jar。 所有模塊都有一個標准的文件夾結構src>main>scala
。 唯一的區別是這個模塊沒有主類,只是一個包含許多其他模塊使用的 util 類的模塊。
更多詳情如下:
我有一個用於多項目構建的標准文件夾結構。
├── project
│ └── build.properties
│ └── plugins.sbt
├── build.sbt
├── Bar
│ └── src
├── Fizz
│ └── src
└── Foo
└── src
我的 plugins.sbt 是: addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.6")
我的 build.sbt 是
ThisBuild / name := "My main Project"
ThisBuild / version := "0.1"
ThisBuild / scalaVersion := "2.11.8"
//Modules/Projects
lazy val global = project
.in(file("."))
.settings(settings)
.disablePlugins(AssemblyPlugin)
.aggregate(
bar,
fizz,
foo
)
lazy val bar = project
.settings(
name := "Bar",
settings,
assemblySettings
)
lazy val fizz = project
.settings(
name := "Fizz",
settings,
assemblySettings
)
lazy val foo = project
.settings(
name := "Foo",
settings,
assemblySettings
)
.dependsOn(
fizz
)
lazy val compilerOptions = Seq(
"-encoding",
"utf8"
)
lazy val settings = Seq(
scalacOptions ++= compilerOptions
)
lazy val assemblySettings = Seq(
assemblyMergeStrategy in assembly := {
case PathList("META-INF", xs @ _*) => MergeStrategy.discard
case x =>
val oldStrategy = (assemblyMergeStrategy in assembly).value
oldStrategy(x)
}
)
所以bar/publishLocal
有效,但fizz/publishLocal
生成一個空罐子,然后任何其他項目中繼已發布的本地罐子 fizz 失敗。
編輯:修正了 Fuzz 到 Fizz 的拼寫錯誤
所以上述問題只是詹金斯的問題,而不是其他任何地方。 通過將build.sbt
的變量重命名為 PascalCase 以匹配文件夾名稱,然后創建正確的 jar 來修復該問題。 例如
lazy val Foo = project
.settings(
name := "Foo",
settings,
assemblySettings
)
.dependsOn(
Fizz
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.