是否需要在新的scala项目中添加自定义scala库依赖项?
我是Scala新手,我正在尝试开发一个使用自定义库的小项目。我在库中创建了一个mysql连接池。这是我的build.sbt库是否需要在新的scala项目中添加自定义scala库依赖项?,scala,sbt,Scala,Sbt,我是Scala新手,我正在尝试开发一个使用自定义库的小项目。我在库中创建了一个mysql连接池。这是我的build.sbt库 organization := "com.learn" name := "liblearn-scala" version := "0.1" scalaVersion := "2.12.6" libraryDependencies += "mysql" % "mysql-connector-java" % "6.0.6" libraryDependencies += "
organization := "com.learn"
name := "liblearn-scala"
version := "0.1"
scalaVersion := "2.12.6"
libraryDependencies += "mysql" % "mysql-connector-java" % "6.0.6"
libraryDependencies += "org.apache.tomcat" % "tomcat-dbcp" % "8.5.0"
我已使用sbt publishLocal
现在我有一个项目,它将通过以下build.sbt使用上述库
name := "SBT1"
version := "0.1"
scalaVersion := "2.12.6"
libraryDependencies += "com.learn" % "liblearn-scala_2.12" % "0.1"
我能够编译新项目,但当我运行它时,我得到了
java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp2.BasicDataSource
但如果我加上
libraryDependencies += "mysql" % "mysql-connector-java" % "6.0.6"
libraryDependencies += "org.apache.tomcat" % "tomcat-dbcp" % "8.5.0"
在项目的build.sbt中,它可以正常工作
这是scala-sbt的实际操作方式吗?ie:我必须提到项目中自定义库的依赖关系?
这是我的库代码(我只有一个文件)
这是我的项目代码:
try {
val conn = MyMySQL.getConnection
val ps = conn.prepareStatement("select * from school")
val rs = ps.executeQuery()
while (rs.next()) {
print(rs.getString("name"))
print(rs.getString("rank"))
println("----------------------------------")
}
rs.close()
ps.close()
conn.close()
} catch {
case ex: Exception => {
println(ex.printStackTrace())
}
}
默认情况下,SBT以传递方式获取所有项目依赖项。这意味着只需要显式声明
liblearn scala
,而不需要声明可传递的依赖项mysql-connector-java
和tomcat-dbcp
。可传递性可以是,可传递依赖性也可以是,但是,除非明确地这样做,否则它不应该是问题的原因
没有看到你的整个
build.sbt
,我相信你做的是正确的。如果sbt clean publishLocal
无法解决问题,您可以尝试使用nuclear选项并清除整个ivy缓存(注意,这将强制所有项目重新获取依赖项) 谢谢!,我必须清理整个常春藤的储藏室,结果一切顺利
try {
val conn = MyMySQL.getConnection
val ps = conn.prepareStatement("select * from school")
val rs = ps.executeQuery()
while (rs.next()) {
print(rs.getString("name"))
print(rs.getString("rank"))
println("----------------------------------")
}
rs.close()
ps.close()
conn.close()
} catch {
case ex: Exception => {
println(ex.printStackTrace())
}
}