gpt4 book ai didi

scala - 是否有必要在新的 scala 项目中添加我的自定义 scala 库依赖项?

转载 作者:行者123 更新时间:2023-12-02 03:06:29 27 4
gpt4 key购买 nike

我是 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 += "org.apache.tomcat" % "tomcat-dbcp" % "8.5.0"

我已使用 sbtpublishLocal 将相同内容发布到本地 ivy 存储库

现在我有一个项目将使用上述库和以下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 执行操作的实际方式吗?即:我必须提到项目内部自定义库的依赖关系?

这是我的库代码(我只有 1 个文件)

package com.learn.scala.db
import java.sql.Connection
import org.apache.tomcat.dbcp.dbcp2._

object MyMySQL {

private val dbUrl = s"jdbc:mysql://localhost:3306/school?autoReconnect=true"
private val connectionPool = new BasicDataSource()

connectionPool.setUsername("root")
connectionPool.setPassword("xyz")

connectionPool.setDriverClassName("com.mysql.cj.jdbc.Driver")
connectionPool.setUrl(dbUrl)
connectionPool.setInitialSize(3)

def getConnection: Connection = connectionPool.getConnection

}

这是我的项目代码:

  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-javatomcat-dbcp 。传递性可以是disabled ,传递依赖关系可以是 excluded ,但是除非明确这样做,否则它不应该是问题的原因。

在没有看到整个 build.sbt 的情况下,我相信您正在做正确的事情。如果 sbt cleanpublishLocal 无法解决问题,您可以尝试核选项并清除整个 ivy 缓存(请注意,这将强制所有项目重新获取依赖项)。

关于scala - 是否有必要在新的 scala 项目中添加我的自定义 scala 库依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51964826/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com