Scala 斯卡拉“;未找到:对象com";-如果没有其他依赖项,我真的应该在build.sbt中添加条目吗?

Scala 斯卡拉“;未找到:对象com";-如果没有其他依赖项,我真的应该在build.sbt中添加条目吗?,scala,playframework,ivy,Scala,Playframework,Ivy,我已经用PlayScalaSeed创建了基本的Scala播放应用程序。此项目使用sbt run编译和运行。但我有另一个Scala项目,它可以编译和运行,我已经用命令sbt publishLocal将它提交到我的本地Ivy存储库。由于此命令,另一个项目保存在C:\Users\tomr\.ivy2\local\com.agiintelligence\scala-isabelle_2.13\master SNAPSHOT 然后,我在IntelliJ中导入了我的Play项目(完全如此导入,而不是刚刚打开

我已经用PlayScalaSeed创建了基本的Scala播放应用程序。此项目使用
sbt run
编译和运行。但我有另一个Scala项目,它可以编译和运行,我已经用命令
sbt publishLocal
将它提交到我的本地Ivy存储库。由于此命令,另一个项目保存在
C:\Users\tomr\.ivy2\local\com.agiintelligence\scala-isabelle_2.13\master SNAPSHOT

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

但是,当我尝试使用
sbt run
运行我的播放应用程序时,我遇到了错误消息
not found:object com
,这正是在我的播放应用程序的Scala控制器文件中编译
import com.agiintelligence
行时出现的

当然-此类错误已经报告并解决,例如。 但该解决方案建议附加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并发布
sbt update
,看看会发生什么,但我不能理解这个逻辑?有人能解释一下,并提供一些线索来解释我的错误消息吗?

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

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

并通过后续运行
sbt update

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


好的,@Luis_Miguel_Mejía_Suárez的评论给出了解释,该评论是我问题的实际和预期答案。

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

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

并通过后续运行
sbt update

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

好的,@Luis_Miguel_Mejía_Suárez的评论给出了解释,该评论是对我问题的实际和预期答案

我的Play应用程序包含(从IntelliJ项目窗格中可以看到)数十个“外部库”

这些可能只是Play依赖项的可传递依赖项,这就是sbt下载所有这些依赖项并将它们放在类路径中的原因,这样您就可以使用它们,而无需告诉它们;因为Play
pom
已经完成了。
这并不是说构建工具或IDE神奇地为您添加了所有这些依赖项,因为它们读懂了您的心思,并且神奇地理解了您想要它们。由于某种原因,魔法不再为你自己的图书馆工作

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

这对于IDE来说已经足够了,但是对于构建工具来说还不够。构建工具独立于IDE;它不知道sbt只知道您在定义文件中配置的依赖项

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

我的Play应用程序包含(从IntelliJ项目窗格中可以看到)数十个“外部库”

这些可能只是Play依赖项的可传递依赖项,这就是sbt下载所有这些依赖项并将它们放在类路径中的原因,这样您就可以使用它们,而无需告诉它们;因为Play
pom
已经完成了。
这并不是说构建工具或IDE神奇地为您添加了所有这些依赖项,因为它们读懂了您的心思,并且神奇地理解了您想要它们。由于某种原因,魔法不再为你自己的图书馆工作

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

这对于IDE来说已经足够了,但是对于构建工具来说还不够。构建工具独立于IDE;它不知道sbt只知道您在定义文件中配置的依赖项


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

您的应用程序是否依赖于