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

SBT中已发布的程序集包中存在未解析的依赖项,sbt,publish,sbt-assembly,Sbt,Publish,Sbt Assembly,在我的项目中,根目录下有3个子项目。build.sbt如下所示。 项目C取决于项目A和项目B。 如果我用下面的命令创建了组装项目包。它成功了,组装包可以导入到其他项目中 sbt“项目项目”组装 如果我使用“sbt publish”发布,正如我在proj_C设置中定义的addArtifact,那么还会生成一个组装jar包,然后发布。但当我试图编译另一个导入这个程序集jar的项目时,它会出现以下错误 [错误]未解析的依赖项:项目A;1.0.0:未找到 build.sbt的一部分如下所示。有人能指出我

在我的项目中,根目录下有3个子项目。build.sbt如下所示。 项目C取决于项目A和项目B。 如果我用下面的命令创建了组装项目包。它成功了,组装包可以导入到其他项目中

sbt“项目项目”组装

如果我使用“sbt publish”发布,正如我在proj_C设置中定义的addArtifact,那么还会生成一个组装jar包,然后发布。但当我试图编译另一个导入这个程序集jar的项目时,它会出现以下错误

[错误]未解析的依赖项:项目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)

首先,我希望你知道这一点。老实说,在你的情况下,我真的认为这样做没有好处

如果您只需单独发布
A
B
C
,然后将依赖项添加到其他项目中,那么所有这些依赖项都将自动下载(以及这些项目的依赖项)。而且依赖关系管理将更容易


但是,因为您想要添加
A-assembly
依赖项,所以我猜您实际上添加了错误的
jar
。我猜您同时发布了
C.jar
C-assembly.jar
,并且添加了如下依赖项:

"your.organisation" %% "C" % "version"
但你应该:

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

这里的“汇编”实际上是指机器代码的汇编语言吗,比如
moveax、[rsi+rax*4]
(x86-64)?和有单独的标记,但我无法判断这些标记是否适用,或者您是否正在使用SBT构建汇编语言项目。如有必要,请固定标签。(参见)。应为sbt组件。对不起,弄糊涂了。我正在使用sbt插件进行组装:addSbtPlugin(“com.eed3si9n”%”sbt assembly“%”0.14.6)找到了原因,但仍然没有合适的解决方案。发布中的程序集jar正常。但是,与程序集jar一起提供的.pom文件定义了对proj_A和proj_B的依赖关系。因此,我需要找到一种方法,在生成程序集jar时自定义pom文件。同意不要发布胖jar。我们在项目C中提供服务,因此我们不想向客户透露A和B。我现在的发现是使用“sbt publish”正确生成了程序集包C。但是在发布过程中生成的.pom文件定义了对项目a的依赖关系。这在发布过程中,所以我不知道我们是否有办法更改行为。我当前的解决方法是使用项目a、B和C中的源文件创建一个新项目,并发布此项目(当然这里没有汇编)。这不是一种优雅的方式,但它可以工作。您是否尝试过手动修改pom并检查它是否可以工作?在生成和发布文件后,您没有权限写入该文件:(您在本地
.m2
中有权限修改本地pom,但没有权限将其上载到repo:(