【问题标题】:What is the relationship between the sbt libraryDependency and the import statement in Scala?Scala 中的 sbt libraryDependency 和 import 语句有什么关系?
【发布时间】:2020-05-13 10:10:28
【问题描述】:

这可能是一个简单的问题,但我无法在任何地方找到答案。当我通过 build.sbt 将库导入 Scala 时,有没有办法根据 sbt libraryDependency 推断导入语句的外观?

现在我正在尝试使用 flexmark 包,通过将 "com.vladsch.flexmark" % "flexmark-all" % "0.61.26", 添加到我的 sbt libraryDependencies 中,我可以成功地将其合并到我的项目中。

但是,对我来说,我应该如何将它实际导入代码本身并不明显——即,我的导入语句应该是什么样子。我可以从 sbt libraryDependency 中猜到吗?还是我应该尝试从每个项目的文档中获取它?如果我看看我还在使用什么,我看不到任何清晰的模式。我过去在不知道这一点的情况下设法勉强过活,但我在这个问题上遇到了一些障碍。提前感谢您的帮助。

【问题讨论】:

  • 没有。一般groupID和package没有联系。

标签: scala import sbt


【解决方案1】:

我会假设没有依赖关系。

当您在 Nexus 上发布库时,系统会要求您证明您对用作组织的域拥有一定的权利。所以例如如果您是 example.com 的所有者,那么您可以在 com.example 下发布工件 - 但 Nexus 或 Sonatype 的维护者或其他人会要求您提供您拥有该域的证明 - 例如通过设置一些 DNS 记录。

这与您如何命名软件包无关,而这与您的用户将如何导入它们无关。您可以遵循相同的命名规则并使用 com.example 作为包名。但由于许多原因,人们可能不想这样做,例如

  • Cats 库位于 org.typelevel 组织下,但输入 org.typelevel.cats 会很长而且很烦人,所以他们选择简单地使用 cats
  • Monix 有io.monix 组织,但包中的所有内容monix
  • 端点具有 org.julienrf 组织,但代码位于 endpoints 包中

等等

它们是完全独立的,如果有人保持一致,那只是因为他们选择以这种方式使用它,而不是因为他们必须这样做。所以只需检查文档,也许使用 IntellIJ 的自动导入。

【讨论】:

    【解决方案2】:

    IDE 有助于自动导入,例如在 IntelliJ 中,您输入名称,然后输入 Alt + Enter

    如果没有 IDE 支持,您将不得不查找 Scaladoc/Javadoc。

    另一种选择是搜索在线存储库,例如 GitHub 存储库并查看源代码中的包语句

    1. 导航到https://github.com/vsch/flexmark-java
    2. t 激活文件查找器

    3. 开始输入名称,如果幸运的话,它将对应文件名

    4. 查看源文件顶部的包语句

    【讨论】:

    • 还有一点值得注意的是,一般文件名和类名没有联系,github搜索是按文件名,而不是类名。
    • 谢谢 - 让我感到惊讶的是,没有更传统的解决方案可以解决这个问题,但无论如何效果都很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 2015-07-20
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多