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

问题描述 投票:0回答:1

在我的项目中,根目录下有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)
sbt publish sbt-assembly
1个回答
0
投票

首先,我希望你知道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"
© www.soinside.com 2019 - 2024. All rights reserved.