SBT中已发布的程序集包中的未解析依赖项

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SBT中已发布的程序集包中的未解析依赖项相关的知识,希望对你有一定的参考价值。

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

sbt“project 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)
答案

首先,我希望你知道the publishing of the fat jar is not recommended。说实话,在你的情况下,我真的看不到这样做有什么好处。

如果您只是单独发布ABC然后在您的其他项目中添加依赖项,它将全部自动下载(以及这些项目的依赖项)。依赖管理将更容易......


但是,既然你想添加A-assembly依赖,错误我想你实际上是在添加错误的jar。我的猜测是你发布了C.jarC-assembly.jar,并添加了依赖关系:

"your.organisation" %% "C" % "version"

但你应该:

"your.organisation" %% "C" % "version" classifier "assembly"

以上是关于SBT中已发布的程序集包中的未解析依赖项的主要内容,如果未能解决你的问题,请参考以下文章

sbt找不到ebean依赖项(一些未解析的依赖项有额外的属性)

Newtonsoft.json 程序集包版本不匹配

从 sbt 项目的安全工件下载依赖项

sbt update 没有解析存储库中的最新工件

为啥 sbt 因 sbt.ResolveException 失败:Spark 2.0.0 和 Scala 2.9.1 的未解决依赖关系?

SBT 不支持自定义解析器