【发布时间】:2017-11-12 11:15:21
【问题描述】:
我很痛苦地意识到关于这个主题的帖子的数量,但到目前为止,浏览它们并没有帮助我。
我有一个使用 sqlite3 数据库的 maven 项目。这从 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 相当缺乏经验,并且正在努力理解为什么会失败。谷歌搜索时可能出现的答案是:
- 我需要以某种方式将 sqlite3 jar 本身包含到我的项目中。也许让它成为一个“胖罐子”而不是依赖 maven 将其作为依赖项引入?
- 我需要将 sqlite3 jar 添加到我在 intelliJ 中的类路径中。我不知道如何明确设置这个...
-
从如下代码显式加载 jar:
Class.forName("org.sqlite.JDBC");
就在建立连接之前...
- 我想直接从命令行运行jar,需要设置sqlite3的路径吗?
我对依赖项的 maven 设置是:
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.20.1</version>
</dependency>
虽然我的方法看起来像:
public static void executeSqlStatement(String sql) 抛出 ClassNotFoundException {
Connection conn = null;
Class.forName("org.sqlite.JDBC");
try {
conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement();
stmt.execute(sql);
} catch (SQLException e) {
System.out.println(e.getMessage());
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
}
}
就像我说的,这一切在 IntelliJ 中都可以正常工作,但我要确认它会以正确的方式作为独立 jar 工作吗?我希望最终将这个项目编译为一个 jar,其他项目可以作为导入导入。
任何关于如何确保我能达到这一点的建议将不胜感激。
谢谢
布拉德利
【问题讨论】:
标签: java maven intellij-idea sqlite classpath