Допустим имеется у нас маленькая программка, которая работает с базой данный SQLite. Создадим JAR-файл и поместим в него все необходимое для работы. Берем sqlite-jdbc-3.7.2.jar, распаковываем в наш каталог с проектом.
alexey@G580:~/java-src/samples/DisplayQueryResults$ ll итого 6,2M drwxr-xr-x 3 alexey 4,0K авг. 27 2010 maven/ drwxr-xr-x 5 alexey 4,0K авг. 27 2010 native/ drwxr-xr-x 4 alexey 4,0K авг. 27 2010 org/ -rw-rw-r-- 1 alexey 1,1K окт. 12 15:30 DisplayQueryResults$1.class -rw-rw-r-- 1 alexey 531 окт. 12 15:30 DisplayQueryResults$2.class -rw-rw-r-- 1 alexey 2,6K окт. 12 15:30 DisplayQueryResults.class -rw-rw-r-- 1 alexey 3,1M окт. 12 17:52 DisplayQueryResults.jar -rw-rw-r-- 1 alexey 2,7K окт. 12 14:34 DisplayQueryResults.java -rw-r--r-- 1 alexey 69 окт. 12 17:35 MANIFEST.MF -rw-r--r-- 1 alexey 4,0K окт. 12 15:25 pressure.db -rw-rw-r-- 1 alexey 2,7K окт. 12 15:30 ResultSetTableModel.class -rw-rw-r-- 1 alexey 2,4K окт. 12 15:32 ResultSetTableModel.java -rw------- 1 alexey 3,1M июня 22 13:29 sqlite-jdbc-3.7.2.jar
Создадим MANIFEST.MF, не забываем о пустой строке в конце файла. Так как файлики лежат у нас прямо под ногами, то добавляем в MANIFEST.MF только одну строчку: Class-Path: .
Manifest-Version: 1.0 Class-Path: . Main-Class: DisplayQueryResults
Теперь создаем JAR. Добавляем в него наши классы скомпилированные и каталоги в которые распаковался наш sqlite-драйвер.
jar cvfm DisplayQueryResults.jar MANIFEST.MF org/ native/ *.class
Запускаем нашу программу:
java -jar DisplayQueryResults.jar
Теперь сделаем JAR не включая в него библиотеки, а просто указав в манифесте где их брать. Для простоты положим sqlite-jdbc-3.8.6.jar в тот же каталог, в котором лежат наши *.class Подправим MANIFEST.MF
Manifest-Version: 1.0 Created-By: 1.7.0_65 (Oracle Corporation) Class-Path: sqlite-jdbc-3.8.6.jar Main-Class: DisplayQueryResults
Создадим JAR
jar -cfm DisplayQueryResults.jar MANIFEST.MF *.class