【问题标题】:Sharing dependencies between independent Play 2 projects in SBT?在 SBT 中的独立 Play 2 项目之间共享依赖关系?
【发布时间】:2017-02-24 22:42:56
【问题描述】:

我正在使用 Play 2 开发一个网站,但我遇到了一些依赖问题。我在文档中进行了搜索,但没有发现任何相关内容。

这是我的项目的结构:

  • api - 一个包含我的模型、服务、控制器等的 Play 2 应用程序。
  • commons - 一个 Play 2 应用程序,提供一些实用程序类、paypal 集成等。

我在apiapi/build.sbt 中添加了commons 的依赖项。在commons 中,我为 PayPal 添加了以下依赖项:

"com.paypal.sdk" % "rest-api-sdk" % "0.7.1"

我以为我只需要在commons 中添加这个依赖项。但是当我在 api 中使用与 PayPal 交互的类时,出现了 ClassNotFound 错误。

api 中向commons 添加依赖项时,SBT 是否不应该检索commons 的依赖项?

如果我在api/build.sbt 中将依赖项添加到 PayPal,一切正常,但我在这两个地方都有这个依赖项。

针对 Jacek 问题进行编辑

  • 播放 2 版本:2.2.0
  • apicommons 是两个独立的 SBT 项目(无根项目)
  • apicommonsapi/build.sbt 中的依赖关系:
libraryDependencies ++= Seq(
    // Other dependencies ...
    "com.mycompany" %% "commons" % "1.0.0"
)

【问题讨论】:

  • 您使用的是哪个版本的 Play? apicommons 是两个没有父/根 SBT 项目的独立 SBT 项目吗?你是如何定义commonsapi 之间的依赖关系的?你能运行tree 或类似的东西来显示项目结构吗?我最感兴趣的是里面有 build.sbtproject/*.scala 文件的目录。
  • 我编辑了问题,这里是play dependencies的粘贴箱:pastebin.com/kxRS1tdK

标签: playframework-2.0 sbt


【解决方案1】:

给定

  • apicommons 是两个独立的 SBT 项目(无根项目)”
  • api/build.sbtapicommons 之间的依赖关系” 通过 libraryDependencies 没有 Ivy 范围。

然后

  • api 项目共享commons 项目的compile 依赖项in+传递。

请注意,由于您“在api 中使用与PayPal 交互的类”,因此您直接 依赖于api 项目中的PayPal 类,因此您必须将 PayPal 依赖项添加到项目的 libraryDependencies。它们是具有自己的构建配置(和依赖项)的独立项目,并且无论一个依赖项如何,另一个应该正确声明自己的依赖项。

【讨论】:

  • 其实我并没有直接在api中使用PayPal类。我只调用commons 中的方法。但是这些方法正在调用PayPal 类。没有办法让apicommons 传递依赖关系?
猜你喜欢
  • 1970-01-01
  • 2012-03-24
  • 2015-12-12
  • 2016-07-26
  • 2014-02-25
  • 1970-01-01
  • 2014-02-26
  • 1970-01-01
  • 2014-01-12
相关资源
最近更新 更多