是否需要在新的scala项目中添加自定义scala库依赖项?

是否需要在新的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 += "

我是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"
我已使用
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())
    }
  }