【发布时间】:2019-01-12 23:20:03
【问题描述】:
在我的项目中,根目录下有 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)
【问题讨论】:
-
在这种情况下,“汇编”实际上是在谈论机器代码的汇编语言,比如
mov eax, [rsi + rax*4](x86-64)? java-bytecode-asm 和 .net-assembly 有单独的标签,但我不知道这些标签是否适用,或者您是否正在使用 SBT 构建汇编语言项目。如有必要,请修复标签。 (见stackoverflow.com/tags/assembly/info)。 -
应该是 sbt-assembly。很抱歉造成混乱。我正在使用 sbt 插件进行组装: addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.6")
-
找到了原因,但仍然没有优雅的解决方案。发布中的程序集 jar 是可以的。但是与程序集 jar 一起的 .pom 文件定义了对 proj_A 和 proj_B 的依赖关系。所以我需要想办法在生成汇编jar的时候自定义pom文件。
标签: sbt publish sbt-assembly