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。说实话,在你的情况下,我真的看不到这样做有什么好处。
如果您只是单独发布A
,B
,C
然后在您的其他项目中添加依赖项,它将全部自动下载(以及这些项目的依赖项)。依赖管理将更容易......
但是,既然你想添加A-assembly
依赖,错误我想你实际上是在添加错误的jar
。我的猜测是你发布了C.jar
和C-assembly.jar
,并添加了依赖关系:
"your.organisation" %% "C" % "version"
但你应该:
"your.organisation" %% "C" % "version" classifier "assembly"
以上是关于SBT中已发布的程序集包中的未解析依赖项的主要内容,如果未能解决你的问题,请参考以下文章
sbt找不到ebean依赖项(一些未解析的依赖项有额外的属性)
为啥 sbt 因 sbt.ResolveException 失败:Spark 2.0.0 和 Scala 2.9.1 的未解决依赖关系?