【问题标题】:Why does SBT find imports while compiling but not while building the project?为什么 SBT 在编译时会找到导入,但在构建项目时却找不到?
【发布时间】:2020-11-26 20:32:45
【问题描述】:

我正在处理一个 Scala sbt 项目,这就是项目结构的样子。

这是 build.sbt 文件的内容:

name := "Blitzkreig"

version := "0.1"

scalaVersion := "2.13.2"

// https://mvnrepository.com/artifact/mysql/mysql-connector-java
libraryDependencies += "mysql" % "mysql-connector-java" % "8.0.21"

我在外部添加的唯一 jar 是 gsp.jar,可以在上面的项目结构图中看到。 我将 jar 添加为库 -> + -> Java 模块 -> Path_Of_Jar_File。

当我完成代码时,我没有看到任何 import 语句的编译错误。但是当我构建项目时,我看到相同的导入语句给出错误,所有错误都来自 gsp.jar 文件。

例如:

导入语句出错的包也存在,如下图所示。

当我点击构建 jar 时,我看到相同的导入语句导致如下错误。

[info] Executing in batch mode. For better performance use sbt's shell
[success] Total time: 0 s, completed 26 Nov, 2020 4:33:10 PM
[info] Compiling 17 Scala sources to /Users/bobby/IdeaProjects/Blitzkreig/target/scala-2.13/classes ...
[error] /Users/bobby/IdeaProjects/Blitzkreig/src/main/scala/com/tablecolumn/TGetTableColumn.scala:5:8: not found: object gudusoft
[error] import gudusoft.gsqlparser._

我将jar文件导入项目的方式有什么问题吗?谁能让我知道我在这里做错了什么?

【问题讨论】:

    标签: scala intellij-idea sbt


    【解决方案1】:

    您仅在 IntelliJ 中添加了 JAR,sbt 看不到它。所以 IntelliJ 编译器可能能够编译代码并且不会显示任何错误,但 sbt 只看到丢失的包。

    如果您想避免此类问题,切勿通过 IDE 添加库,请始终通过您的构建工具(无论是 sbt、Maven、gradle 还是其他工具)将它们添加为托管或非托管依赖项,然后在 IDE 中刷新您的项目(对于每个构建系统,都有一个用于重新同步构建的专用选项)。

    您在外部添加了“仅一个包”并不重要 - 如果您添加了任何包而忽略了构建系统,那么您的设置就会损坏。

    如果您想添加非托管依赖项(例如它未在工件上发布),请将其添加到 lib directory

    【讨论】:

    • 哇哦。三年以来我一直从事 SBT 项目,我并不关心如何添加外部 jar 作为依赖项。我在 build.sbt 中将外部 jar 作为依赖项添加为:unmanagedJars in Compile += file("/Users/bobby/Downloads/Software/jars/gsp.jar") 并且导入错误消失了。
    • 我有一个问题。在我从事的其他项目中,当我遇到ClassNotFound Exception for ex:数据库驱动程序类时,我曾经添加外部 jar,因为我在问题的图像中给出了它,它用于解决问题。这和我现在面对的有什么不同。这应该永久解决我的疑问。谢谢你的解释。
    • 一个疯狂的猜测,但可能你从来没有在你的代码中直接引用驱动程序,只在类名作为字符串运行时反射中,所以一切编译但在 IDE 之外运行后中断。
    • 不适合所有人。我的数据库之一是 Greenplum,我有一个自定义 jar,因此没有可用的官方依赖项。我从来没有习惯将 build.sbt 中的特定 jar 作为非托管 jar 文件保存。用于正确编译和构建的代码。它也运行了,因为我曾经用我想要的所有 jar 文件制作一个胖 jar。我只有 Greenplum 罐子作为外部罐子,所以最后的胖罐子永远不会很大,即在大多数情况下
    猜你喜欢
    • 2020-07-27
    • 2014-05-18
    • 1970-01-01
    • 2021-02-03
    • 2012-02-15
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    相关资源
    最近更新 更多