簡體   English   中英

Publish Local 在多模塊 SBT 項目中生成空 jar

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM