Eclipse: Как создать исполняемую банку с внешней банкой?

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

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

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

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

Ответ 1

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

Ответ 2

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

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

win32: java.exe -cp app.jar;dependency.jar foo.MyMainClass
*nix:  java -cp app.jar:dependency.jar foo.MyMainClass

Ответ 3

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

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

В основном вы просите Eclipse построить build.xml, который импортирует ваши библиотеки в вашу банку для вас.

  • Запустите Eclipse и создайте новый Java-проект, создайте новый пакет "mypackage", добавьте свой основной класс: Runner Вставьте этот код там.

    enter image description here

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

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

  • В Eclipse перейдите к FileExportJavaRunnable Jar File. Вы увидите это диалоговое окно:

    enter image description here

    Обязательно установите флажок "Сохранить как ant script". Именно это и позволяет использовать командную строку для ant jar позже.

  • Затем перейдите к терминалу и посмотрите на ant script:

    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 и стрелу. У вас есть кусок в MyProject. И вы можете вызвать его с помощью java -jar Hello.jar, и все это работает.

Ответ 4

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

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

Ant build.xml script пример:

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