Создать файл JAR без учета внешних зависимостей - PullRequest
6 голосов
/ 15 февраля 2010

Можно ли создать файл JAR, который требует внешних зависимостей, не включая эти зависимости в файл JAR?

Мой гугл-фу не смог дать мне ответ; все, что я обнаружил, показывает, как включить их в файл JAR, но не то, что поместить в файл манифеста, чтобы сказать: «У меня их нет, посмотрите в пути к классам пользователя». Я бы предположил, что зависимости правильно установлены и настроены на пути к классам пользователя.

В моем случае мои зависимости - это Apache Commons CLI и Math.


Edit: Внутри моего JAR-файла у меня есть Main.class.

Мой файл манифеста выглядит так:

Manifest-Version: 1.0
Created-By: 1.6.0 (Sun Microsystems Inc.)
Main-Class: Main

Мой CLASSPATH выглядит как

.;C:\Program Files\Java\jre1.6.0_06\lib\ext\QTJava.zip;C:\java_lib\commons-cli-1.2.jar;C:\java_lib\commons-math-2.0\commons-math-2.0.jar

Если я включу зависимости в JAR в /lib и добавлю строку Class-Path: lib/commons-math-2.0.jar lib/commons-cli-1.2.jar к манифесту, то это сработает.

Я попытался добавить Class-Path: commons-math-2.0.jar commons-cli-1.2.jar в манифест, не включая файлы в JAR, просто чтобы посмотреть, сработает ли это, но это не помогло.

Ответы [ 2 ]

3 голосов
/ 15 февраля 2010

Используйте запись Class-Path в META-INF/MANIFEST.MF, чтобы указать, где искать зависимости относительно вашего JAR-файла. Например:

Class-Path: servlet.jar ../foo/bar.jar acme/beans.jar
3 голосов
/ 15 февраля 2010

Это, конечно, возможно.Один из способов думать об этом - каждый раз, когда вы создаете банку, вы зависите от классов в банке, и нет необходимости включать их в вашу банку.Jre будет автоматически искать их в пути к классам.Если они не найдены, вы увидите NoClassDefFoundError.

...