为什么 SBT 在编译时找到导入而不是在构建项目时找到导入?
Why does SBT find imports while compiling but not while building the project?
我正在做一个 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.
当我完成代码时,我没有看到任何导入语句的编译错误。但是当我构建项目时,我看到相同的导入语句给出错误,所有错误都来自 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文件到项目中的方式有问题。谁能告诉我我做错了什么?
您只在 IntelliJ 中添加了 JAR,sbt 看不到它。所以 IntelliJ 编译器可能能够编译代码并且不显示任何错误,但 sbt 只看到缺少的包。
如果你想避免此类问题,切勿通过 IDE 添加库,始终通过你的构建工具(无论是 sbt、Maven、gradle 或其他东西),然后在 IDE 中刷新你的项目(对于每个构建系统,都有一个专门的选项来重新同步构建)。
您在外部添加了“仅一个包”并不重要 - 如果您添加了任何包而忽略了构建系统,那么您的设置就会损坏。
如果你想添加非托管依赖(因为例如它没有发布在 artifactory 上)将它添加到 lib
directory。
我正在做一个 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.
当我完成代码时,我没有看到任何导入语句的编译错误。但是当我构建项目时,我看到相同的导入语句给出错误,所有错误都来自 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文件到项目中的方式有问题。谁能告诉我我做错了什么?
您只在 IntelliJ 中添加了 JAR,sbt 看不到它。所以 IntelliJ 编译器可能能够编译代码并且不显示任何错误,但 sbt 只看到缺少的包。
如果你想避免此类问题,切勿通过 IDE 添加库,始终通过你的构建工具(无论是 sbt、Maven、gradle 或其他东西),然后在 IDE 中刷新你的项目(对于每个构建系统,都有一个专门的选项来重新同步构建)。
您在外部添加了“仅一个包”并不重要 - 如果您添加了任何包而忽略了构建系统,那么您的设置就会损坏。
如果你想添加非托管依赖(因为例如它没有发布在 artifactory 上)将它添加到 lib
directory。