如何将H2数据库嵌入到交付给客户端的jar文件中?

Posted

技术标签:

【中文标题】如何将H2数据库嵌入到交付给客户端的jar文件中?【英文标题】:How to embed H2 database into jar file delivered to the client? 【发布时间】:2010-12-14 19:16:26 【问题描述】:

我将 H2 数据库用于嵌入式模式的桌面应用程序。当我将应用程序压缩成 jar 文件时,数据库文件被省略。所以,当我运行 MyApplication.jar 时,没有任何效果。使用 MyApplication.jar 嵌入/包含/连接 h2.jar 文件的正确方法是什么?或者也许还有另一种方法可以在捆绑包中交付数据库和应用程序?

【问题讨论】:

你是如何创建这个 JAR 文件的?您是在使用 Maven 等构建工具,还是只是从命令行运行 jar 我使用 Eclipse。有一个导出到 jar 文件的选项,所以我使用该选项。 我建议花时间学习 Maven:sonatype.com/books/mvnref-book/reference/public-book.html -- 从长远来看,这项投资将获得多次回报。 【参考方案1】:

一种常见的方案是将h2.jar 放在相对于您的应用程序的lib 目录中,并在您的JAR 清单中包含一个Class-Path 条目及其对应的条目:

Class-Path: lib/h2.jar lib/…

附录:这个小的project 包含一个指向JAR specification 的链接和一个方便的实用程序,用于检查清单原位

【讨论】:

@bancer:我已经在上面详细说明了。【参考方案2】:

如果您使用 Maven 来构建您的项目,只需使用 maven-shade-plugin... 很好的结果和控制,我一直在使用它。

要嵌入所有依赖项,您可以编写如下内容:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>1.4</version>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

然后,只需一个普通的“mvn 包”,您就可以将所有依赖项的 jar 包含在您的应用程序 jar 中。

通过进一步配置,您可以控制包含哪些内容和不包含哪些内容。

【讨论】:

【参考方案3】:

如果你想把 database 本身放在你的 jar 文件中,那么这个解释可能会有所帮助: http://www.h2database.com/html/features.html#database_in_zip

this thread in the H2 forum 也对此进行了讨论。

【讨论】:

【参考方案4】:

如果您使用 maven 构建项目,请查看 maven-assembly-plugin (jar-with-dependencies)。这将生成单个 jar,其中包含所有依赖项。

【讨论】:

以上是关于如何将H2数据库嵌入到交付给客户端的jar文件中?的主要内容,如果未能解决你的问题,请参考以下文章

配置嵌入式 H2 用户以进行分发

如何使用嵌入式数据库 H2 创建 jar 文件?

H2 嵌入式数据库在部署时丢失表/数据

使用嵌入式容器部署war文件与可执行jar的建议

springboot集成h2

如何将 iOS 应用 IPA 交付给客户以使用他们自己的企业配置文件进行签名