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 перейдите к File
→ Export
→ Java
→ Runnable 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>
Ответ 5
Попробуйте удлинитель жировой банки. Он будет включать все внешние банки в банке.
Ответ 6
посмотри @
java-jar-ignores-classpath-Workaround