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