代码之家  ›  专栏  ›  技术社区  ›  TomR

Scala“not found:object com”-如果没有其他依赖项,我真的应该在build.sbt中添加条目吗?

  •  0
  • TomR  · 技术社区  · 3 年前

    我已经用创建了基本的Scala Play应用程序 https://www.playframework.com/getting-started 播放斯卡拉种子。此项目编译并运行 sbt run . 但是我有另一个Scala项目可以编译和运行,我已经用命令将它提交到本地的Ivy存储库 sbt publishLocal . 另一个项目保存在 C:\Users\tomr\.ivy2\local\com.agiintelligence\scala-isabelle_2.13\master-SNAPSHOT 作为这个命令的结果。

    然后我在IntelliJ中导入了(完全是这样导入的,不是刚刚打开的)我的Play项目,我使用了 Project - Open Module Settings - Project Settings - Libraries 从我的ivy2位置添加com.jar。在这些操作之后,IntelliJ编辑器识别com.agiintelligence类。那很好。

    但是当我试着用 ,我遇到了错误消息 not found: object com 那正是编译的时候 import com.agiintelligence

    当然-此类错误已报告并解决,例如。 object play not found in scala application 但该解决方案建议附加build.sbt文件。我的build.sbt文件非常简单:

    name := """agiintelligence"""
    organization := "com.agiintelligence"
    
    version := "1.0-SNAPSHOT"
    
    lazy val root = (project in file(".")).enablePlugins(PlayScala)
    
    scalaVersion := "2.13.5"
    
    libraryDependencies += guice
    libraryDependencies += "org.scalatestplus.play" %% "scalatestplus-play" % "5.0.0" % Test
    
    // Adds additional packages into Twirl
    //TwirlKeys.templateImports += "com.skaraintelligence.controllers._"
    
    // Adds additional packages into conf/routes
    // play.sbt.routes.RoutesKeys.routesImport += "com.skaraintelligence.binders._"
    

    我的Play应用程序包含(从IntelliJ项目窗格可以看到)几十个“外部库”(它也显示了我的com.agiintelligence jar),但是如果这里没有列出其他库,为什么我要在build.sbt文件中添加我自己的ivy2库呢?我的图书馆有什么不同?它在我的计算机上,在存储库中,就像预期的那样?

    当然,我可以尝试添加build.sbt和issue sbt update 看看会发生什么,但我不明白这个逻辑?有人能解释一下,并提供一些线索,以理解我的错误信息的解决方案吗?

    1 回复  |  直到 3 年前
        1
  •  2
  •   Luis Miguel Mejía Suárez    3 年前

    这些可能只是您的 依赖,这就是为什么 sbt公司 pom 属于 已经有了。
    并不是说构建工具或IDE神奇地为您添加了所有这些依赖项,因为它们读懂了您的想法,并且神奇地理解了您想要它们。因为某种原因,魔法停止了对你自己的图书馆的作用。

    为什么仅仅列出it项目设置是不够的——仅在IntelliJ中列出外部库?

    sbt公司 只知道在定义文件中配置的依赖项。

    更重要的是,您应该始终在构建工具上配置依赖项,然后将其导入IDE中;而不是相反。ide是图形化工具,因此它们的状态不能被提交,不能被共享,不能跟踪变化,不能在CI/CD环境中使用;另外,不同的队友可能需要使用不同的ide。

        2
  •  0
  •   TomR    3 年前

    我通过添加行输入来解决错误消息 build.sbt 文件

    libraryDependencies+=“de.unruh”%%“scala isabelle”%”“主快照”

    以及随后的 sbt update

    错误解决了,但主要的问题仍然存在——为什么我要这么做?为什么build.sbt中没有列出几十个依赖项,为什么我应该在build.sbt中列出我的依赖项,为什么仅仅列出它是不够的 Project-Setting--External Libraries

    好吧,@Luis\u Miguel\u Meja\u Surez的评论给出了解释,这个评论是对我问题的实际和预期的回答。