Eclipse: Как собрать исполняемый jar с внешним jar? - PullRequest
47 голосов
/ 02 февраля 2009

Я пытаюсь создать исполняемую jar-программу, которая зависит от загруженного внешнего jar-файла. В моем проекте я включил их в путь сборки, и их можно запускать и отлаживать в eclipse.

Когда я пытался экспортировать его в банку, я могу запустить программу, но не могу, когда пытаюсь нажать кнопку, которая включает вызовы функций и классы из внешней банки. Я отредактировал переменные окружения (Windows XP) CLASSPATH, чтобы включить пути ко всем внешним jar-файлам, но он не работает.

Следует отметить, что при экспорте моего исполняемого файла jar я получил предупреждения о компиляции, но в нем нет описания предупреждений.

Не мог бы кто-нибудь предоставить подробное руководство о том, как включить внешнюю jar-программу с использованием eclipse?

Ответы [ 6 ]

36 голосов
/ 29 апреля 2010

Eclipse 3.5 имеет возможность упаковать необходимые библиотеки в исполняемый файл jar. Файл -> Экспорт ... Выберите работающую банку и нажмите «Далее». В окне экспорта запускаемого файла jar есть переключатель, где вы можете выбрать упаковку необходимых библиотек в jar.

14 голосов
/ 02 февраля 2009

Вы можете сделать это, написав манифест для своей банки . Посмотрите на заголовок Class-Path . Eclipse имеет возможность выбрать свой собственный манифест при экспорте.

Альтернативой является добавление зависимости к пути к классам во время вызова приложения:

win32: java.exe -cp app.jar;dependency.jar foo.MyMainClass
*nix:  java -cp app.jar:dependency.jar foo.MyMainClass
8 голосов
/ 30 декабря 2013

Как включить банки вашего проекта в свою работающую банку:

Я использую Eclipse Version: 3.7.2, работающую в Ubuntu 12.10. Я также покажу вам, как сделать build.xml, чтобы вы могли сделать ant jar из командной строки и создать свой jar с другими импортированными jar-файлами, извлеченными в него.

По сути, вы просите Eclipse создать build.xml, который импортирует ваши библиотеки в ваш jar-файл.

  1. Запустите Eclipse и создайте новый проект Java, создайте новый пакет 'mypackage', добавьте ваш основной класс: Runner Поместите этот код туда.

    enter image description here

  2. Теперь добавьте mysql-connector-java-5.1.28-bin.jar из Oracle , который позволяет нам писать Java для подключения к базе данных MySQL. Сделайте это, щелкнув правой кнопкой мыши по проекту -> свойства -> путь сборки Java -> Добавить внешний Jar -> выберите mysql-connector-java-5.1.28-bin.jar.

  3. Запустите программу в eclipse, она должна запуститься и сообщить вам, что имя пользователя / пароль неверны, что означает, что Eclipse правильно настроен с помощью jar.

  4. В Eclipse перейдите к File -> Export -> Java -> Runnable Jar File. Вы увидите этот диалог:

    enter image description here

    Обязательно установите флажок «Сохранить как сценарий муравья». Именно поэтому вы можете использовать командную строку, чтобы сделать ant jar позже.

  5. Затем перейдите в терминал и посмотрите на скрипт ant:

    enter image description here

Итак, вы видите, я запустил банку, и она не выдала ошибку, потому что нашла включенный mysql-connector-java-5.1.28-bin.jar, встроенный в Hello.jar.

Загляните внутрь Hello.jar: vi Hello.jar, и вы увидите много ссылок на com/mysql/jdbc/stuff.class

Чтобы сделать ant jar в командной строке, чтобы сделать все это автоматически: переименуйте buildant.xml в build.xml и измените имя цели с create_run_jar на jar.

Затем изнутри MyProject вы вводите ant jar и boom. У вас есть банка внутри MyProject. И вы можете вызвать его, используя java -jar Hello.jar, и все работает.

5 голосов
/ 04 февраля 2009

В качестве хорошей практики вы можете использовать Ant Script (Eclipse поставляется с ним) для создания вашего JAR-файла. Внутри этого JAR вы можете иметь всех зависимых библиотек.

Вы можете даже установить заголовок Class-path в MANIFEST, чтобы он указывал на файлы в вашей файловой системе, хотя это не очень хорошая практика.

Пример сценария Ant build.xml:

<project name="jar with libs" default="compile and build" basedir=".">
<!-- this is used at compile time -->
<path id="example-classpath">
    <pathelement location="${root-dir}" />
    <fileset dir="D:/LIC/xalan-j_2_7_1" includes="*.jar" />
</path>

<target name="compile and build">
    <!-- deletes previously created jar -->
    <delete file="test.jar" />

    <!-- compile your code and drop .class into "bin" directory -->
    <javac srcdir="${basedir}" destdir="bin" debug="true" deprecation="on">
        <!-- this is telling the compiler where are the dependencies -->
        <classpath refid="example-classpath" />
    </javac>

    <!-- copy the JARs that you need to "bin" directory  -->
    <copy todir="bin">
        <fileset dir="D:/LIC/xalan-j_2_7_1" includes="*.jar" />
    </copy>

    <!-- creates your jar with the contents inside "bin" (now with your .class and .jar dependencies) -->
    <jar destfile="test.jar" basedir="bin" duplicate="preserve">
        <manifest>
            <!-- Who is building this jar? -->
            <attribute name="Built-By" value="${user.name}" />
            <!-- Information about the program itself -->
            <attribute name="Implementation-Vendor" value="ACME inc." />
            <attribute name="Implementation-Title" value="GreatProduct" />
            <attribute name="Implementation-Version" value="1.0.0beta2" />
            <!-- this tells which class should run when executing your jar -->
            <attribute name="Main-class" value="ApplyXPath" />
        </manifest>
    </jar>
</target>

2 голосов
/ 02 февраля 2009

Попробуйте расширение фляги. Он будет включать все внешние банки внутри банки.

0 голосов
/ 17 февраля 2010
...