问题描述
当我在某些模块上执行 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",assemblySettings
)
lazy val foo = project
.settings(
name := "Foo",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 to Fizz 的拼写错误
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)