Maven 关于 SQLite-jdbc 驱动问题

  最近给帮另外的团队搞一个Server服务问题,因为服务很微小,所以使用SpringBoot + SQLite。看到很多SpringBoot + SQLite项目使用的是jpa,但是我对这种orm框架不是很感冒,MyBatis手写sql才能感觉顺畅。所以,自己动手丰衣足食。于是,我在https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc/3.20.0找到了相关jar包的信息,于是在 pom.xml 内加入了以下的引用:

<dependency>
    <groupId>org.xerial</groupId>
    <artifactId>sqlite-jdbc</artifactId>
    <version>3.20.0</version>
    <scope>test</scope>
</dependency>

  就在我以为可以高兴地撸代码的时候,我却手动引入了隐患。在写好了一个简单的demo,准备看看效果的时候,出现了一下的错误:

java.sql.SQLException: Unable to load class: org.sqlite.JDBC from ClassLoader:sun.misc.Launcher$AppClassLoader@18b4aac2;ClassLoader:TomcatEmbeddedWebappClassLoader
  context: ROOT
  delegate: true
----------> Parent Classloader:
sun.misc.Launcher$AppClassLoader@18b4aac2

  我google了所有相关问题的答案,依然没有解决这个报错。我很好奇,我在 application.properties 内点击org.sqlite.JDBC 都可以跳转到相应的class文件,为什么在运行的时候却找不到相应的类。我甚至把整个相关换到了MySQL来检验框架的正确性,显然,框架经受住了考验,而SQLite 驱动的问题,依然无法解决。时间就这样经过,几个小时以后,我发现,我google的所有的答案,用到的 sqlite-jdbc 的版本都是 3.7.2 。于是我在想是不是版本的问题,我就切换到了 3.7.2 。

<dependency>
    <groupId>org.xerial</groupId>
    <artifactId>sqlite-jdbc</artifactId>
    <version>3.7.2</version>
</dependency>

  实验的结果,让我很震惊,perfect!项目运行起来了。可是为什么 3.20.0 就不行呢。于是重新切换到了 3.20.0 ,发现依然无法运行。我观察到两者的区别,在于<scope>test</scope>,所以我就把scope给去掉了,结果我的宝贝跑起来了。哈哈。今天两次遇到scope的问题,这是个bad boy!

  然后,我就看到了google到了这个http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope。真是想来句 MMP, 原来都怪书看的少。

发表评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.