Как включить внешнюю банку в проект Netbeans
Когда я запускаю "очищать и строить", создаваемый файл .jar
запускается только в том случае, если папка lib
находится в той же папке файла .jar
.
Поэтому, если я перемещаю файл jar на рабочий стол и оставляю папку lib
в папке dist
, файл jar выдаст мне исключение.
Как я могу решить эту проблему?
Ответы
Ответ 1
Если вы копируете свои банки в каталог исходного кода, они будут в вашей последней банке. Тем не менее, я не уверен, что это будет работать в 100% случаев.
В java-forum, в котором указано следующее:
За исключением некоторых немногих обстоятельств, то, что лучше всего подходит для меня, - это просто объедините файлы вручную. A.jar - это в основном .zip с организованное содержимое, и вы можете открыть их практически в любом формате .zip. (я просто использую стандартный архиватор gnome, File Roller, и он отлично работает). Создайте резервную копию файла jar и откройте его в архиваторе по вашему выбору и делать то же самое для каждой библиотеки в библиотеке каталог. Перетащите рабочие папки (IE, все за исключением EXCEPT каталог META-INF) из каждой библиотеки в корневой путь jar (рядом с вашим META-INF и вашим корневым пакетом приложения). Теперь перетяните Файл META-INF/MANIFEST.MF из вашей банки на рабочий стол или любой другой папка. Откройте его и сотрите линии Class-Path и X-COMMENT. не забудьте оставить пустую строку в конце файла! Сохраните новый файл манифеста и перетащите его обратно в свой каталог META-INF, перезаписывая старый. Проверьте сосуд.
Ответ 2
Я решил это, создав только один файл jar со всеми библиотеками внутри, добавив следующее в мой файл build.xml в NetBeans:
<target name="-post-jar">
<jar jarfile="dist/Combined-dist.jar">
<zipfileset src="${dist.jar}" excludes="META-INF/*" />
<zipfileset src="lib/commons-io-1.4.jar" excludes="META-INF/*" />
<zipfileset src="lib/ninja-utils-3.2.jar" excludes="META-INF/*" />
<zipfileset src="lib/unicorn-1.0.jar" excludes="META-INF/*" />
<manifest>
<attribute name="Main-Class" value="com.example.mypackage.Main"/>
</manifest>
</jar>
</target>
Это создает файл jar (Combined-dist.jar), который представляет собой комбинацию дискового пространства и указанных библиотек (в этом случае commons-io-1.4.jar, ninja-utils-3.2.jar и unicorn -1.0.jar). Вы должны обязательно указать свой пакет основного класса для нового файла jar или он не будет запускаться при попытке открыть его.
Ответ 3
Это очень легко упаковать каждую зависимую библиотеку (*.jar) в один файл myProject.jar.
Просто выполните следующие действия, и вы, наконец, упакуете каждую зависимую библиотеку в одну банку. Если вы используете NetBeans, вы можете точно следовать, или вам нужно найти файл build.xml в файлах проекта.
Для редактирования build.xml
выполните следующие действия:
1) Нажмите на Files tab
в левой части панели проекта в NetBeans.
2) Дважды щелкните файл build.xml
и добавьте в него эти строки непосредственно перед </project>
line
<target name="package-for-store" depends="jar">
<property name="store.jar.name" value="myProject"/>
<property name="store.dir" value="store"/>
<property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>
<echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>
<delete dir="${store.dir}"/>
<mkdir dir="${store.dir}"/>
<jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip">
<zipgroupfileset dir="dist" includes="*.jar"/>
<zipgroupfileset dir="dist/lib" includes="*.jar"/>
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
</manifest>
</jar>
<zip destfile="${store.jar}">
<zipfileset src="${store.dir}/temp_final.jar"
excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
</zip>
<delete file="${store.dir}/temp_final.jar"/>
</target>
3) Измените value
во второй строке кода в соответствии с вашим именем проекта
<property name="store.jar.name" value="myProject"/> //<---Just value not name
4) Сохраните его и щелкните правой кнопкой мыши по build.xml и выберите Запустить цель, а затем Другие цели и, наконец, нажмите Пакет-для-магазина
5) И вот вы сделали. Теперь вы можете пойти и проверить, как в папке dist
будет папка store
, в которой будет содержаться ваша окончательная полная банка, включая все ваши зависимые библиотеки. Теперь, когда вы хотите изменить/добавить больше библиотек или просто, просто выполните шаг 4.
Изображение для шага 4
![enter image description here]()
Ответ 4
Вы можете использовать Apache Ant с версии 1.7 для сборки JAR с необходимыми библиотеками только в одном файле. У вас может быть файл конфигурации следующим образом:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project default="buildJar">
<target name="buildJar">
<!-- Name of jar -->
<jar destfile="C:/MyJar.jar" filesetmanifest="mergewithoutmain">
<manifest>
<!-- Your class with the main method -->
<attribute name="Main-Class" value="myPackage.MyClass"/>
<!-- Path in the jar -->
<attribute name="Class-Path" value="."/>
</manifest>
<!-- Dir of compiled class -->
<fileset dir="C:/NetBeansProjects/MyProject/bin"/>
<!-- Include required jars -->
<zipfileset excludes="META-INF/*.SF"
src="C:/NetBeansProjects/MyProject/lib/library1.jar"/>
<zipfileset excludes="META-INF/*.SF"
src="C:/NetBeansProjects/MyProject/lib/library2.jar"/>
</jar>
</target>
</project>
В Netbeans поместите XML файл в свой проект и запустите его в контекстном меню.
Подробнее в Apache Ant Руководство пользователя.
Ответ 5
Если вы собираетесь распространять свое приложение на другой компьютер
Вы просто zip.jar вместе с папкой lib.
Если вы хотите запустить приложение из любого места на вашем ПК
Возьмите в косвенном способе Maven это сделать - создайте локальный репозиторий, например. C:\libs, где будут существовать ваши библиотеки, и .jar может получить доступ к ним позже из любого места на вашем компьютере.
Или вы могли бы просто использовать Maven. Существует дискуссия о распространении приложения со всеми зависимостями (библиотеками): Java: как мне создать автономные дистрибутивы проектов на основе Maven?.
Ответ 6
Скопируйте этот файл jar в:
C:\Program Files\Java\jdk\jre\lib\ext
и
C:\Program Files\Java\jre\lib\ext
Вы можете использовать его в Netbeans и в вашем ручном импорте, так же как и стандартный импорт.
Ответ 7
Это то, что сработало для меня:
Я построил функцию экспорта excel в свой проект. 2 внешних .jars, которые я использовал для этой цели, были jxl.jar end sx.jar
Распакуйте эти 2 банки в папку (классы java), используя 7-Zip без каких-либо файлов META. Распакуйте свою банку проекта в одну и ту же папку, включая файл META.
Переустановите всю папку классов java с помощью JARMaker, чтобы воссоздать ваш проект .jar в своей исходной папке распространения... и там вы идете... полнофункциональная функциональность.
Ответ 8
user1016588 решение работает для меня. Там одна опечатка: эта строка должна быть zipfileset src= "dist/lib/commons-io-1.4.jar" исключает = "META-INF/*"
Ответ 9
Попробуйте это - в среде Netbeans IDE:
- Перейдите в Инструменты → Библиотеки
- В диалоговом окне в левом нижнем углу нажмите "Новая библиотека", введите имя
- С правой стороны нажмите "Добавить JAR/Папка"
- Нажмите ОК в правом нижнем углу.
- Запустите IDE и проверьте.
Ответ 10
Я разработал, возможно, самое простое решение этой проблемы. Вам просто нужно изменить одну строку кода. Все библиотеки найдены автоматически.
Здесь мы идем:
<target name="-post-jar">
<!-- Change the value to the name of the final jar without .jar -->
<property name="store.jar.name" value="MyJarName"/>
<!-- don't edit below this line -->
<property name="store.dir" value="dist"/>
<property name="temp.dir" value="temp"/>
<property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>
<echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>
<delete dir="${temp.dir}"/>
<mkdir dir="${temp.dir}"/>
<jar destfile="${temp.dir}/temp_final.jar" filesetmanifest="skip">
<zipgroupfileset dir="dist" includes="*.jar"/>
<zipgroupfileset dir="dist/lib" includes="*.jar"/>
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
</manifest>
</jar>
<delete dir="${store.dir}"/>
<zip destfile="${store.jar}">
<zipfileset src="${temp.dir}/temp_final.jar"
excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
</zip>
<delete dir="${temp.dir}"/>
</target>
-
Перейдите в свой файл build.xml и добавьте код прямо перед тегом закрывающего проекта в конце.
-
Теперь измените значение поля firsttiy как комментарий
-
Нажмите "Очистить" и "Создать", и ваша банка будет находиться в папке dist
Ответ 11
Выполните следующие действия:
1. Щелкните правой кнопкой мыши проект, открытый в редакторе netbeans.
2. выберите свойства
3. выбрать библиотеки
4. добавить банку
5. нажмите ok
Ответ 12
Вы также можете использовать это (когда библиотеки не находятся в "dist/lib" ), протестированы с помощью NetBeans и ant -contrib:
<target name="-post-jar">
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<!-- Path to ant-contrib -->
<pathelement location="../../Libs/ant-contrib-1.0b3.jar"/>
</classpath>
</taskdef>
<!-- Change the value to the name of the final jar without .jar -->
<property name="store.jar.name" value="${application.title}"/>
<!-- don't edit below this line -->
<property name="store.dir" value="dist"/>
<property name="temp.dir" value="temp"/>
<property name="temp.libs.dir" value="temp/libs"/>
<property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>
<echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>
<fileset id="store.jars.absolute" dir="${store.dir}" includes="*.jar"/>
<pathconvert property="store.jars.relative" refid="store.jars.absolute" dirsep="/">
<map from="${basedir}/" to=""/>
</pathconvert>
<for list="${store.jars.relative}" param="item">
<sequential>
<echo message="Adding @{item} into single JAR at ${store.jar}"/>
</sequential>
</for>
<delete dir="${temp.dir}"/>
<mkdir dir="${temp.dir}"/>
<for list="${javac.classpath}" param="item" delimiter=":">
<sequential>
<echo message="Adding @{item} into single JAR at ${store.jar}"/>
<copy file="@{item}" todir="${temp.libs.dir}" overwrite="true" />
</sequential>
</for>
<jar destfile="${temp.dir}/temp_final.jar" filesetmanifest="skip">
<zipgroupfileset dir="${store.dir}" includes="*.jar"/>
<zipgroupfileset dir="${temp.libs.dir}" includes="*.*"/>
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
</manifest>
</jar>
<delete dir="${store.dir}"/>
<zip destfile="${store.jar}">
<zipfileset src="${temp.dir}/temp_final.jar" excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
</zip>
<delete dir="${temp.dir}"/>
</target>