【问题标题】:Why are transitive dependencies not detected?为什么没有检测到传递依赖?
【发布时间】:2016-01-10 17:14:38
【问题描述】:

我有基于 SBT 的 Scala 库,我将其发布到 Maven 存储库:

organization := "com.mycompany"
name := "mylib"
version := "0.0.1"
scalaVersion := "2.10.6"
crossScalaVersions := Seq("2.10.6", "2.11.7")
scalacOptions ++= Seq("-feature", "-unchecked", "-deprecation")

libraryDependencies ++= Seq(
  "org.scalaj" %% "scalaj-http" % "2.2.0",
  "org.json4s" %% "json4s-jackson" % "3.3.0",
  "org.slf4j" % "slf4j-api" % "1.7.13",
  "org.slf4j" % "slf4j-simple" % "1.7.13"
)

isSnapshot := true
publishMavenStyle := true
publishTo := {
  Some(s3resolver.value("My Repo", s3("mybucket")).withMavenPatterns)
}

我将此库包含到另一个项目中:

libraryDependencies ++= Seq(
  "com.mycompany" %% "mylib" % "0.0.1"
)

运行sbt sbt-dependency dependencyTree 只显示:

[info] Done updating.
[info] default:another-project_2.10:1.2 [S]
[info]   +-com.mycompany:mylib_2.10:0.0.1
[info]     

我无法查看所有第 3 方依赖项:org.scalajorg.json4s 等。

编辑:此外,在构建程序集时,uberjar 中也缺少这些依赖项。

部署到 Maven 存储库的 .pom 文件确实包含所有提到的依赖项,而 ~/.ivy2/cache/com.mycompany/mylib_2.10/ivy-0.0.1.xml 没有。

在 mylib/ 中运行 sbt about 显示:

[info] Loading global plugins from /home/michael/.sbt/0.13/plugins
[info] Loading project definition from /home/michael/Dev/projects/mylib/project
[info] Set current project to mylib (in build file:/home/michael/Dev/projects/mylib/)
[info] This is sbt 0.13.9
[info] The current project is {file:/home/michael/Dev/projects/mylib/}mylib 0.0.1
[info] The current project is built against Scala 2.10.6
[info] Available Plugins: sbt.plugins.IvyPlugin, sbt.plugins.JvmPlugin, sbt.plugins.CorePlugin, sbt.plugins.JUnitXmlReportPlugin, com.typesafe.sbteclipse.plugin.EclipsePlugin, ohnosequences.sbt.SbtS3Resolver
[info] sbt, sbt plugins, and build definitions are using Scala 2.10.5

在 otherproject/ 中运行 sbt about 显示:

[info] Loading global plugins from /home/michael/.sbt/0.13/plugins
[info] Loading project definition from /home/michael/Dev/projects/otherproject/project
[info] Set current project to otherproject (in build file:/home/michael/Dev/projects/otherproject/)
[info] Updating {file:/home/michael/Dev/projects/otherproject/}otherproject...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] This is sbt 0.13.9
[info] The current project is {file:/home/michael/Dev/projects/otherproject/}otherproject 1.2
[info] The current project is built against Scala 2.10.6
[info] Available Plugins: sbt.plugins.IvyPlugin, sbt.plugins.JvmPlugin, sbt.plugins.CorePlugin, sbt.plugins.JUnitXmlReportPlugin, com.typesafe.sbteclipse.plugin.EclipsePlugin, ohnosequences.sbt.SbtS3Resolver, net.virtualvoid.sbt.graph.DependencyGraphPlugin, sbtassembly.AssemblyPlugin
[info] sbt, sbt plugins, and build definitions are using Scala 2.10.5

这是发布到本地目录的输出:

[info] Loading global plugins from /home/michael/.sbt/0.13/plugins
[info] Loading project definition from /home/michael/Dev/projects/mylib/project
[info] Set current project to mylib (in build file:/home/michael/Dev/projects/mylib/)
[info] Updating {file:/home/michael/Dev/projects/mylib/}mylib...
[info] Packaging /home/michael/Dev/projects/mylib/target/scala-2.10/mylib_2.10-0.0.1-sources.jar ...
[info] Done packaging.
[info] Wrote /home/michael/Dev/projects/mylib/target/scala-2.10/mylib_2.10-0.0.1.pom
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] :: delivering :: com.mycompany#mylib_2.10;0.0.1 :: 0.0.1 :: integration :: Sat Jan 09 16:10:20 IST 2016
[info]  delivering ivy file to /home/michael/Dev/projects/mylib/target/scala-2.10/ivy-0.0.1.xml
[info] Main Scala API documentation to /home/michael/Dev/projects/mylib/target/scala-2.10/api...
[info] Packaging /home/michael/Dev/projects/mylib/target/scala-2.10/mylib_2.10-0.0.1.jar ...
[info] Done packaging.
model contains 9 documentable templates
[info] Main Scala API documentation successful.
[info] Packaging /home/michael/Dev/projects/mylib/target/scala-2.10/mylib_2.10-0.0.1-javadoc.jar ...
[info] Done packaging.
[info]  published mylib_2.10 to /home/michael/Dev/projects/mylib/releases/com/mycompany/mylib_2.10/0.0.1/mylib_2.10-0.0.1.pom
[info]  published mylib_2.10 to /home/michael/Dev/projects/mylib/releases/com/mycompany/mylib_2.10/0.0.1/mylib_2.10-0.0.1.jar
[info]  published mylib_2.10 to /home/michael/Dev/projects/mylib/releases/com/mycompany/mylib_2.10/0.0.1/mylib_2.10-0.0.1-sources.jar
[info]  published mylib_2.10 to /home/michael/Dev/projects/mylib/releases/com/mycompany/mylib_2.10/0.0.1/mylib_2.10-0.0.1-javadoc.jar
[success] Total time: 4 s, completed Jan 9, 2016 4:10:23 PM

我做错了什么?

【问题讨论】:

  • 为什么isSnapshot := true 既然"0.0.1" 是稳定的,即非快照版本?
  • 这仅用于测试目的,以启用发布者覆盖工件。我尝试禁用它,但没有运气
  • 你能在两个项目中都做sbt about 吗?你使用什么版本的 sbt-dependency-graph?你可以改用publishTo := Some(Resolver.file("file", new File("releases")))(不是s3)吗?请包括问题的输出。 (剧透:它对我有用)

标签: scala sbt


【解决方案1】:

您的build.sbt 文件包含该行

publishMavenStyle := true

根据the documentation

一个 POM 由 makePom 操作生成并发布到 存储库而不是 Ivy 文件

我可以假设 ivy.xml 只是没有生成,而您看到的是前一次运行的残留物,当时 publishMavenStyle 尚未(尚未)设置。

由于您的工件已发布到 Maven 存储库中,您是否尝试过从 ~/.ivy2/cache/com.mycompany/mylib_2.10 中删除该工件并检查依赖关系树列表的结果?

【讨论】:

  • 是的,我尝试删除 ~/.ivy/cache/com.mycompany~/.m2/repository/com/mycompany(以防万一),并重新检查依赖关系树。 ivy-0.0.1.xml 文件仍会重新创建,但内部没有依赖项。
猜你喜欢
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-30
相关资源
最近更新 更多