问题
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?
回答1:
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.
回答2:
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.
回答3:
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.
回答4:
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.
来源:https://stackoverflow.com/questions/4443192/how-to-embed-h2-database-into-jar-file-delivered-to-the-client