Подтвердить что ты не робот

Как включить внешнюю банку в проект Netbeans

Когда я запускаю "очищать и строить", создаваемый файл .jar запускается только в том случае, если папка lib находится в той же папке файла .jar.

Поэтому, если я перемещаю файл jar на рабочий стол и оставляю папку lib в папке dist, файл jar выдаст мне исключение.

Как я могу решить эту проблему?

4b9b3361

Ответ 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>