scala - Publish Local 在多模块 SBT 项目中生成空 jar
问题描述
当我在某些模块上执行 publishLocal 时,它可以工作,但是对于一个模块,它会生成只有META-INF/Manifest.MF
. 所有模块都有一个标准的文件夹结构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
会生成一个空 jar,然后任何其他在已发布的本地 jar of fizz 上中继的项目都会失败。
编辑:修正了 Fuzz 到 Fizz 的错字
解决方案
所以上面的问题只是詹金斯的一个问题,其他任何地方都没有。通过将变量重命名build.sbt
为 PascalCase 以匹配文件夹名称,然后创建正确的 jar 来修复该问题。例如
lazy val Foo = project
.settings(
name := "Foo",
settings,
assemblySettings
)
.dependsOn(
Fizz
)
推荐阅读
- html - 大小不适用于使用引导程序的图像
- python - 如何检查属于可变大小行块的多行上的多个条件并返回主行
- android - 在 React Native 中设置第一个项目
- python - python中的跟踪函数
- node.js - 如何使用excel4node在excel表格中写入数组
- python - 合并 pandas df 时出错。TypeError:(“'float'类型的对象没有len()”,'发生在索引D')
- javascript - 无法获取元素的属性
- xcode - 将 Xcode 项目 (Xcode 9) 添加到 Subversion (SVN)
- nativescript-vue - NativeScript-Vue - 从外部组件导航
- firebase - 不能有多个默认规则