Question

I use H2 database for a desktop application in embedded mode. When I compress the application into jar file the database file is omitted. So, when I run MyApplication.jar nothing works. What is the correct way to embed/include/connect h2.jar file with MyApplication.jar? Or maybe there is another way to deliver database and application in the bundle?

Was it helpful?

Solution

One common scheme is to put h2.jar in a lib directory relative to your application and include a Class-Path entry in your JAR's manifest with an entry for it:

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

Addendum: This small project includes a link to the JAR specification and a handy utility for examining the manifest in situ.

OTHER TIPS

If you are using Maven to build your project, just use maven-shade-plugin... great results and control, I've been using it a lot.

For embedding all your dependencies you would write something like:

  <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>

Then with just a normal "mvn package" you'll have all your dependencies' jars included in your application jar.

With further configuration you can control what gets included and what not.

If you want to put the database itself in your jar file, then this explanation might help: http://www.h2database.com/html/features.html#database_in_zip

This is also discussed in this thread in the H2 forum.

If you're using maven to build you project take a look maven-assembly-plugin (jar-with-dependencies). This would produce single jar with all dependencies packed into it.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top