首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有必要在新scala项目中添加我的自定义scala库依赖项?

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

Stack Overflow用户
提问于 2018-08-22 10:27:16
回答 1查看 288关注 0票数 3

我是Scala的新手,我正在尝试开发一个使用自定义库的小项目。我在库中创建了一个mysql连接池。这是我的build.sbt图书馆

代码语言:javascript
复制
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

代码语言:javascript
复制
name := "SBT1"
version := "0.1"
scalaVersion := "2.12.6"
libraryDependencies += "com.learn" % "liblearn-scala_2.12" % "0.1"

我能够编译这个新项目,但是当我运行它时

代码语言:javascript
复制
 java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp2.BasicDataSource

但如果我加上

代码语言:javascript
复制
libraryDependencies += "mysql" %  "mysql-connector-java" % "6.0.6"
libraryDependencies += "org.apache.tomcat" % "tomcat-dbcp" % "8.5.0"

在项目的build.sbt中,它的工作没有任何问题。

,这是用scala做事情的实际方法吗?ie :我必须提到自定义库在项目?中的依赖关系。

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

代码语言:javascript
复制
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

}

这是我的项目代码:

代码语言:javascript
复制
  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())
    }
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-22 13:45:55

默认情况下,SBT以传递的方式获取所有项目依赖项。这意味着应该只显式声明liblearn-scala,而不是传递性依赖项mysql-connector-javatomcat-dbcp。传递性可以是已禁用,传递性依赖可以是排除在外,但是,除非这已经显式地完成了,否则它不应该是问题的原因。

没有看到你的整个build.sbt,我相信你做的是对的。如果sbt clean publishLocal没有解决这个问题,您可以尝试核选项并清除整个常春藤缓存(请注意,这将迫使所有项目重新获取依赖项)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51964826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档