Comment puis-je inclure jar externe sur mon projet Netbeans

quand j'exécute" nettoyer et construire "le fichier .jar qui est créé ne s'exécute que si le dossier lib est dans le même dossier que le fichier .jar .

donc si je déplace le fichier jar vers le bureau et que je laisse le dossier lib dans le dossier dist , le fichier jar me donnera une exception.

Comment puis-je traiter ce problème?

22
demandé sur Lucio 2012-05-31 17:26:46

12 réponses

si vous copiez vos bocaux dans le répertoire de code source, ils seront dans votre bocal final. Néanmoins, je ne suis pas sûr que cela fonctionne 100% du temps.

il y a un grand message à java-forum qui déclare ce qui suit:

sauf dans certaines circonstances, ce qui fonctionne le mieux pour moi est de il suffit de fusionner les fichiers manuellement. Un. jar est en gros un .zip avec organisé contenu, et vous pouvez l'ouvrir dans presque tous les .zip capable programme d'archives (je viens d'utiliser l'archiveur standard de gnome, File Roller, et il fonctionne très bien). Sauvegardez votre fichier jar et ouvrez-le dans l'archiveur de votre choix, et faites de même pour chaque bibliothèque pot dans la bibliothèque répertoire. Glisser et déposer les dossiers de travail (C'est-à-dire, tout sauf le répertoire META-INF) de chaque bibliothèque dans le chemin racine de votre pot (à côté de votre méta-INF et du paquet root de votre application). Maintenant, faites glisser le META-INF / MANIFEST.MF fichier à partir de votre pot votre Bureau ou n'importe quel autre dossier. Ouvrez-le et effacez les lignes Class-Path et X-COMMENT. Ne pas oubliez de laisser une ligne vierge à la fin du fichier! Enregistrer la nouvelle manifestez le fichier et ramenez-le dans le répertoire META-INF de votre jar, en écrasant l'ancien. Test du bocal.

13
répondu rlinden 2012-05-31 13:41:55

j'ai résolu cela en créant juste un fichier jar avec toutes les bibliothèques à l'intérieur, en ajoutant ce qui suit à ma compilation.fichier xml dans 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>

cela crée un fichier jar (Combined-dist.jar) qui est la combinaison du jar dist et des jarres de bibliothèque spécifiées (dans ce cas, commons-io-1.4.jar, ninja-utils-3.2.Jarre et licorne-1.0.pot.) Vous devez être sûr de spécifier votre paquet de classe principale pour le nouveau fichier jar ou il ne sera pas lancé lorsque vous essayez de l'ouvrir.

23
répondu Hemerson Varela 2013-06-20 18:47:20

C'est vraiment facile d'empaqueter chaque bibliothèque dépendante (*.jar) dans un seul myProject.pot.

il suffit de suivre ces étapes et vous allez enfin emballer chaque bibliothèque dépendante dans un seul pot. Si vous utilisez NetBeans alors vous pouvez suivre exactement ou vous avez besoin de trouver votre construire.fichier xml dans les fichiers de projet.

suivez ces étapes pour éditer construire.xml

1) Cliquez sur Files tab sur le côté gauche du panneau de projet dans NetBeans.

2) double-cliquez sur le fichier build.xml et ajoutez ces lignes juste avant </project> ligne

 <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) changez value à la deuxième ligne du code selon le nom de votre projet qui est

<property name="store.jar.name" value="myProject"/> //<---Just value not name

4) Enregistrez-le et faites un clic droit sur construire.xml et choisir Exécuter Cible puis Autres Objectifs et enfin, cliquez sur Paquet-pour-store

5) et voilà. Maintenant vous pouvez aller et vérifier comme le dossier dist il y aura un dossier store qui contiendra votre jar complet final incluant toutes vos bibliothèques dépendantes. Maintenant, chaque fois que vous voulez changer / ajouter plus de bibliothèques ou alors, il suffit de suivre l'étape 4.

image pour étape 4

enter image description here

8
répondu Abdul Jabbar Dumrai 2014-11-08 08:38:51

vous pouvez utiliser Apache Ant depuis la version 1.7 pour construire le JAR avec les bibliothèques nécessaires dans un seul fichier. Vous pouvez avoir un fichier de configuration comme suit:

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

dans Netbeans, placez le fichier XML dans votre projet et lancez-le avec le menu contextuel.

Voir plus Apache Ant Manuel de l'Utilisateur .

5
répondu Paul Vargas 2016-07-22 17:33:16

si vous allez distribuer votre application sur un autre pc

tu viens de fermer .jar avec le dossier lib.

si vous voulez lancer votre application à partir d'un endroit quelconque de votre pc

Prendre en cosideration Maven façon de le faire - créer un dépôt local par exemple. C:\libs où vos bibliothèques existeraient et .jar pourrait y accéder plus tard à partir de n'importe quel endroit dans votre pc.

Ou tu pourrais juste utiliser Maven. Il y a une discussion sur la distribution des applications avec toutes les dépendances (bibliothèques): Java: comment construire des distributions autonomes de projets basés sur Maven? .

3
répondu JMelnik 2017-05-23 10:29:27

copier ce fichier jar vers:

C:\Program fichiers\Java\jdk\jre\lib\ext

et

C:\Program fichiers\Java\jre\lib\ext

vous devriez être en mesure de l'utiliser dans Netbeans et dans vos importations manuelles, tout comme les importations standard.

3
répondu Thiyagarajan 2012-07-07 16:30:54

j'ai trouvé peut-être la solution la plus facile pour ce problème ici . Vous avez juste besoin de copier l'extrait de code suivant à la fin du fichier build.xml dans votre dossier de projet.

<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>
  1. Aller à la construire.xml dans la racine de votre projet et ajouter le code juste avant </project> étiquette à la fin.

  2. changez maintenant la valeur du premier champ de propriété comme commenté et enregistrer les modifications.

  3. à partir de Maintenant, chaque fois que vous nettoyez et construisez votre projet, le pot complet avec des dépendances sera généré dans le dossier de dist projet

2
répondu Deniz Celebi 2018-10-03 19:59:46

C'est ce qui a fonctionné pour moi:

j'ai intégré la fonctionnalité d'exportation excel dans mon projet. Les 2 externes .les pots que j'ai utilisés à cette fin étaient jxl.pot de fin sx.jar

déballez ces 2 bocaux dans un dossier(classe java) en utilisant 7-Zip sans aucun méta-fichier. Déballez votre bocal de projet dans le même dossier incluant le méta-fichier.

Re-Pack l'ensemble des classes java dossier à l'aide de JARMaker de recréer votre Projet .jar dans son dossier de distribution original ... et là vous allez ... fonctionnalité excel complète.

1
répondu user2270400 2013-04-11 13:26:07
La solution de

user1016588 fonctionne pour moi. Il y a une faute de frappe: cette ligne devrait être zipfileset src= " dist/lib / commons-io-1.4.jar "excludes =" META-INF / * "

1
répondu Gang Su 2013-04-17 19:33:52

Essayer ce - que dans l'EDI Netbeans:

  1. allez à outils -- > bibliothèques
  2. dans la boîte de dialogue, cliquez en bas à gauche sur "nouvelle bibliothèque" , donnez un nom
  3. sur le côté droit, cliquez sur "Ajouter Jar / Folder "
  4. cliquez sur OK en bas à droite
  5. redémarrer L'IDE et vérifier.
1
répondu vfredrick 2013-12-27 16:38:14

suivez ces:- 1. Clic droit sur le projet ouvert dans netbeans editor 2. sélectionnez propriétés 3. choisir des bibliothèques 4. ajouter le jar 5. cliquez sur ok

0
répondu myskons 2014-04-16 09:52:28

vous pouvez également utiliser ceci( lorsque les bibliothèques ne sont pas dans" dist/lib"), testé avec NetBeans et 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>
0
répondu user2830808 2017-06-12 11:43:22