2009-02-02 4 views
46

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

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

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

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

+3

Не делайте этого. Серьезно, никогда не зависеть от вашей среды разработки для создания артефакта сборки, для этого используйте скрипты (maven, ant). – Marko

+0

Maven и Ant упоминаются как альтернативы. Я мог бы перечислить более неясные инструменты построения, но эти два являются стандартными. Нет смысла разрабатывать дальше, так как существует много информации о них уже. – Marko

ответ

14

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

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

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

Последнее предложение не будет работать. Аргумент '-cp' (и' -classpath' ** игнорируется ** при использовании '-jar'. – BalusC

+0

@BalusC - вы правы; я должен отредактировать ответ. – McDowell

+0

@McDowell: спасибо - никогда не получится это правильно. –

5

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

Вы даже можете указать заголовок класса 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> 

36

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

+1

Кажется, хорошо. За исключением того факта, что мне нужно иметь конфигурацию запуска. Но создать пустую конфигурацию запуска не составит труда. –

+6

Это (может) также создает файл сборки Ant, который можно запустить позже (будь то внутри IDE или вне IDE). Лучшее из обоих миров! –

8

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

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

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

  1. Пожар на Eclipse, и сделать новый проект Java, создать новый пакет «MyPackage», добавьте свой главный класс: Runner Поместите этот код там.

    enter image description here

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

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

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

    enter image description here

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

  5. Затем перейдите к терминалу и посмотрите на муравья сценария:

    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, и все это работает.