我正在编写一个小型 Java 应用程序,用于将数据读取/写入嵌入式 h2 数据库。 出于开发目的,我想将数据库添加到从我的应用程序生成的 jar 文件中。
用例是:用户仅获得交付的 jar 文件,并且能够读取数据并将数据写入其中嵌入的数据库。
有没有办法实现这个目标?
注意:我正在 IntelliJ 中开发应用程序并使用 maven 构建项目
您似乎在问两个不同的问题:
第一个很简单。告诉您的依赖管理和构建工具(例如 Maven 或 Gradle)包含 H2。下载并安装此类库的副本就是此类工具的工作。
对于 Maven,请参阅 Cheat Sheet 页面,了解要包含在 POM 中的当前 Maven 依赖项 XML 片段。
<!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.2.222</version>
<scope>compile</scope>
</dependency>
scope
元素。
关于在 JAR 中捆绑数据库的问题,请研究对您的问题的评论。他们注意到您无法在部署运行时写入 JAR 文件。您的数据库必须位于 JAR 文件的“外部”。各种OS在其文件系统中都有专门的位置供应用程序写入此类数据文件。 一条评论建议您的代码在 JAR 中查找数据库。如果找到,则将该数据库复制到 JAR 之外的另一个文件夹。然后继续使用该外部化副本。
这个方法可行。但我会选择
架构迁移。 架构迁移
,在部署运行时,您可以创建一个新数据库,然后运行一系列 SQL 脚本。这些脚本执行DDL命令,例如创建表。这些脚本运行 DML 命令来根据需要创建行。 您可以选择架构迁移工具来查找、管理和运行这些脚本。我更喜欢
Flyway,尽管 Liquibase 也很受欢迎。其他也可能存在。