SBT中已发布的程序包中未解决的依赖性

时间:2018-08-06 03:21:08

标签: sbt publish sbt-assembly

在我的项目中,根目录下有3个子项目。 build.sbt如下。 proj_C取决于proj_A和proj_B。 如果我使用以下命令创建了程序集proj_C包。成功并可以将组装包导入其他项目。

  

sbt“项目proj_C”程序集

如果我使用“ sbt publish”进行发布(如我在proj_C设置中定义的addArtifact),则还将生成一个组装jar包,然后进行发布。但是当我尝试编译另一个导入此程序集jar的项目时,它将低于错误

  

[错误]未解决的依赖项:proj_A; 1.0.0:找不到

build.sbt的

部分如下。谁能指出我做错的方式吗? 非常感谢!

artifact in (Compile, assembly) := {
  val art = (artifact in (Compile, assembly)).value
  art.withClassifier(Some("assembly"))
}

lazy val assemblySettings = Seq(
  assemblyMergeStrategy in assembly := {
    {
      case PathList("META-INF", xs @ _*) => MergeStrategy.discard
      case _ => MergeStrategy.first
    }
  }
)

lazy val root = Project(base = file("."))
  .disablePlugins(sbtassembly.AssemblyPlugin)
  .aggregate(proj_A, proj_B, proj_C)
  .settings(
    commonSettings,
    skip in publish := true,
    name := "proj_root"
  )

lazy val proj_A= (project in file("proj_A"))
  .disablePlugins(sbtassembly.AssemblyPlugin)
  .settings(
    commonSettings,
    skip in publish := true,
    name := "proj_A"
  )

lazy val proj_B= (project in file("proj_B"))
  .disablePlugins(sbtassembly.AssemblyPlugin)
  .settings(
    commonSettings,
    skip in publish := true,
    name := "proj_B"
  )

lazy val proj_C= (project in file("proj_C"))
  .settings(
    commonSettings,
    assemblySettings,
    addArtifact(artifact in (Compile, assembly), assembly),
    name := "proj_C"
  ) dependsOn(proj_A, proj_B)

1 个答案:

答案 0 :(得分:0)

首先,我希望您知道the publishing of the fat jar is not recommended。老实说,在您的情况下,这样做真的没有好处。

如果您只是分别发布filename = 'ZL-SA_feedback report_012844.xlsx' matched = re.search('feedback.{0,3}report.*\.xlsx?', filename.lower()) import glob glob.glob('*[fF][eE][dD][bB][aA][cC][kK]*[rR][eE][pP][oO][rR][tT]*.xlsx') A,然后在其他项目中添加依赖项,则所有依赖项将自动下载(以及那些项目的依赖项)。而且依赖管理将更加容易...


但是,由于您要添加B依赖项,因此我猜是您实际上添加了错误的C。我的猜测是,您同时发布了A-assemblyjar,并且添加了如下依赖项:

C.jar

但是您应该拥有:

C-assembly.jar