Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未找到适合jdbc:sqlite:_Java_Maven_Intellij Idea_Sqlite_Classpath - Fatal编程技术网

Java 未找到适合jdbc:sqlite:

Java 未找到适合jdbc:sqlite:,java,maven,intellij-idea,sqlite,classpath,Java,Maven,Intellij Idea,Sqlite,Classpath,我痛苦地意识到关于这个主题的帖子数量之多,但到目前为止,浏览这些帖子并没有帮到我 我有一个maven项目,它使用sqlite3数据库。这在intelliJ中成功运行。但我想通过运行以下命令检查它是否也能够作为jar运行: Bradleys-MBP:general-state-machine atkinsb$ java -cp target/general-state-machine-1.0-SNAPSHOT.jar com.bradley.atkins.state.GeneralStat

我痛苦地意识到关于这个主题的帖子数量之多,但到目前为止,浏览这些帖子并没有帮到我

我有一个maven项目,它使用sqlite3数据库。这在intelliJ中成功运行。但我想通过运行以下命令检查它是否也能够作为jar运行:

    Bradleys-MBP:general-state-machine atkinsb$ java -cp target/general-state-machine-1.0-SNAPSHOT.jar com.bradley.atkins.state.GeneralStateMachine
No suitable driver found for jdbc:sqlite:/Users/atkinsb/.general_state_machine/default/20171112105601/database/sm.db
Exception in thread "main" java.lang.ClassNotFoundException: org.sqlite.JDBC
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:264)
        at com.bradley.atkins.state.StateMachineDb.executeSqlStatement(StateMachineDb.java:82)
        at com.bradley.atkins.state.StateMachineDb.createTables(StateMachineDb.java:33)
        at com.bradley.atkins.state.StateMachineInit.prepareDatabase(StateMachineInit.java:54)
        at com.bradley.atkins.state.StateMachineInit.prepare(StateMachineInit.java:12)
        at com.bradley.atkins.state.GeneralStateMachine.main(GeneralStateMachine.java:12)
我对Java相当缺乏经验,正在努力理解为什么它会失败。在谷歌搜索时可能出现的答案是:

  • 我需要以某种方式将SQLite3JAR本身包含到我的项目中。也许让它成为一个“胖罐子”,而不是依赖maven将其作为依赖项
  • 我需要在intelliJ中将sqlite3 jar添加到我的类路径中。我不知道如何明确地设置这个
  • 从如下代码显式加载jar:

    Class.forName(“org.sqlite.JDBC”)

就在建立连接之前

  • 我试图直接从命令行运行jar,需要设置sqlite3的路径
我对依赖项的maven设置是:

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

正如我所说,这一切在IntelliJ中都可以正常工作,但我是否要确认它将以正确的方式作为一个独立的jar工作?我希望最终将这个项目编译成一个jar,其他项目可以将其作为导入

任何关于如何确保我能达到这一点的建议都将不胜感激

谢谢


Bradley

类路径中缺少您的类(但您显然已经知道了)。这个问题是由您如何处理JAR的打包以及如何运行应用程序引起的

当您从InteliJ(或大多数集成了Maven的IDE)运行程序时,它会自动在类路径上包含Maven定义的所有必需JAR和依赖项,并且一切正常。但是,当您使用命令行(如
java-cp…
)运行应用程序时,Maven依赖项不会附加到类路径中,除非您专门添加它们。由于您的类似乎也没有打包在您的JAR中,因此在运行应用程序时,它不在您的类路径上

如果您要使用命令行运行程序,以准确地再现它在IntelliJ中的运行方式,那么这将是一个非常长的命令,包含
target/classes
目录和
cp
选项中包含的所有依赖项,例如

java -cp C:/myproject/target/classes/;C:/somewhere/.m2/repository/org/xerial/sqlite-jdbc/3.20.1/sqlite-jdbc-3.20.1/sqlite-jdbc-3.20.1.jar; ... [lots of dependencies] ... ;C:/somewhere/.m2/repository/org/somepackage/someartifact.jar
我需要以某种方式将SQLite3JAR本身包含到我的项目中。 也许这是个“肥罐子”

我认为这是正确的方法,有一点细微差别。如果希望使用
java
命令将JAR作为一个独立的应用程序运行,您可能需要创建一个。请看一看或。一点谷歌搜索就会告诉你如何用依赖项创建JAR

我希望最终将这个项目编译成一个jar,与其他项目一样 可以作为一种进口

如果您希望其他项目使用Maven作为依赖项拉入您的项目,您可能不希望使您的JAR可执行或“胖JAR”。(这可能会导致各种问题,如类重叠)例如,如果您的JAR应该是其他项目的库或助手,您可以在Maven repo上部署应用程序,并使用相同的
机制在其他项目中引用它

当您定义依赖项时,Maven也会拉取任何依赖项(依赖项的依赖项)。尝试运行以查看当前应用程序使用的所有依赖项


我不知道你对Maven的熟悉程度,如果需要任何精确性,我会相应地编辑我的答案;)

非常感谢,皮埃尔。这很有帮助。是的,我对maven的经验有限,在过去的几个月里,我一直在从事一个maven项目,学到了很多东西,但之前没有任何经验。您已经为我澄清了很多,并让我思考如何部署它。再一次,谢谢!:)很乐意帮忙!如果这个答案有助于你自由投票和/或接受它;)
java -cp C:/myproject/target/classes/;C:/somewhere/.m2/repository/org/xerial/sqlite-jdbc/3.20.1/sqlite-jdbc-3.20.1/sqlite-jdbc-3.20.1.jar; ... [lots of dependencies] ... ;C:/somewhere/.m2/repository/org/somepackage/someartifact.jar