【发布时间】:2017-06-01 19:40:07
【问题描述】:
我需要连接到mssql 服务器。所以我在我的build.sbt 文件中这样描述dependency:
libraryDependencies += "com.microsoft.sqlserver" % "mssql-jdbc" % "6.1.0.jre8"
然后我开始sbt。然后我运行'run' 命令并得到一个错误
object microsoft is not a member of package com
import com.microsoft.sqlserver
这是完整的应用程序对象:
import com.microsoft.sqlserver
object PC extends App {
println("Hello there") // yes, I do nothing with microsoft.sqlserver package
}
这是project/build.properties的内容:
sbt.version=0.13.15
在此之后,我用谷歌搜索,一无所获,然后进入 /tmp/ 目录以模拟我在工作目录中尝试做的事情。
我创建了build.sbt:
name := "Hello sbt"
version := "2017-05-31"
scalaVersion := "2.9.2"
libraryDependencies += "com.microsoft.sqlserver" % "mssql-jdbc" % "6.1.0.jre8"
和简单的应用程序:
import com.microsoft.sqlserver
object HW extends App {
println("Hello there!")
}
和项目/build.properties:
sbt.version=0.13.15
如您所见,它与我之前的代码几乎相同 - 只是对象名和文件名不同。
此代码已编译并运行良好。
我在target/streams/compile/dependencyClasspath/$global/streams/export 中找到了com.microsoft.sqlserver jar 文件路径:它指向我的主目录中的.ivy2 目录:/home/alex/.ivy2/cache/com.microsoft.sqlserver/mssql-jdbc/jars/mssql-jdbc-6.1.0.jre8.jar。 (所以它已经被加载了。)
我不明白为什么两个几乎完全相同的项目表现不同。
我还从sbt 文件中清除了这两个文件夹并得到了相同的结果。
我做错了什么?我错过了什么?有什么想法吗?
附:两个目录中的show sources 显示不同的位置。我从home 目录中删除了.sbt 目录,然后再次运行sbt。
查看project/target/streams/compile/dependencyClasspath/$global/streams/export 和target/streams/compile/dependencyClasspath/$global/streams/export 显示了不同的结果。出于某种原因run sbt 没有查看~/.ivy2/ 目录。
“解决”我的问题是从我的项目中删除整个 scala 代码结构,然后从头开始重新创建它。似乎sbt 使用了一些与执行它的目录几乎没有关系的缓存。
【问题讨论】:
-
show sources和show managedClasspath输出什么?在任何一种情况下。 -
在 fail*( 目录中显示:Attributed(/home/alex/.sbt/boot/scala-2.10.6/lib/scala-library.jar) 和 *ok dir: 属性(/home/alex/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.9.2.jar) 属性(/home/alex/.ivy2/cache /com.microsoft.sqlserver/mssql-jdbc/jars/mssql-jdbc-6.1.0.jre8.jar) [等等] 他们指向不同的地方。为什么会这样?
-
不同的 sbt 版本?另外,添加
scalaVersion := "2.12.2"。显然它没有拾取你的依赖。 -
Also, add scalaVersion := "2.12.2"- 这有什么帮助? -
给你一个合理的 scala 版本来使用 ;-)