web-dev-qa-db-fra.com

Comment inclure des fichiers JAR dans lib dans le fichier JAR du projet dans Netbeans?

J'utilise des jar Apache HttpClient, je les ai donc placées dans le répertoire lib de mon projet. Lorsque Netbeans compile le projet, il copie la lib et génère un jar de projet dans le répertoire dist, mais lorsque je lance mon projet avec Webstart, je dois copier le projet jar et lib dans le répertoire racine de Tomcat, je me demande si Netbeans peut générer un fichier jar de projet qui inclut tous les fichiers jar du répertoire lib. Je n'ai donc pas à copier le projet jar et le répertoire lib dans le répertoire racine de Tomcat. Netbeans peut-il faire cela?

30
Frank
11
Frank

Il est très facile de conditionner chaque bibliothèque dépendante (* .jar) dans un seul fichier myProject.jar.

Il suffit de suivre ces étapes et vous allez enfin emballer chaque bibliothèque dépendante dans un seul fichier. Si vous utilisez NetBeans, alors vous pouvez suivre exactement sinon vous devez trouver votre fichier build.xml dans les fichiers de projet.

Suivez ces étapes pour éditer build.xml

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

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

 <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 dans 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 cliquez avec le bouton droit de la souris sur build.xml et choisissez Run Target et ensuite Autres cibles et enfin cliquez sur Package-for-store

5) Et ici vous avez fait. Maintenant, vous pouvez vérifier que, tout comme le dossier dist, il y aura un dossier store qui contiendra votre fichier jar complet final, y compris toutes vos bibliothèques dépendantes. Maintenant, chaque fois que vous souhaitez modifier/ajouter plus de bibliothèques ou plus, suivez simplement l'étape 4.

Image pour l'étape 4

enter image description here

69

Robert Eckstein décrit une solution pour ce problème. Il vous suffit de coller le code suivant dans build.xml. Les bibliothèques sont toutes trouvées automatiquement.

Et c'est parti:

<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. Accédez à votre build.xml et ajoutez le code juste avant la balise de projet de fermeture à la fin.

  2. Maintenant changez la valeur du premier champ de propriété comme commenté

  3. Cliquez sur Clean & Build, et votre jarre sera dans le dossier dist

Lien de référence: https://stackoverflow.com/a/30172829/2761273

6
Deniz Celebi

Ok, alors c'est ma solution. Moi aussi j'ai eu le problème avec la compilation et l'exécution de mon programme sur Netbeans, mais cela a échoué lorsque j'ai essayé Java -jar MyJarFile.jar. Maintenant, je ne comprends pas tout à fait Maven et je pense que cela explique pourquoi il était difficile pour Netbeans 8.0.2 d’inclure mon fichier jar dans une bibliothèque afin de le mettre dans un fichier jar. Je pensais à la manière dont j’utilisais jar des fichiers jar sans Maven dans Eclipse. 

C'est Maven qui compile toutes les dépendances et les plugins, pas Netbeans. (Si vous pouvez faire en sorte que Netbeans le fasse, dites-nous comment.)

[Résolu - pour Linux] en ouvrant un terminal. 

Ensuite

cd /MyRootDirectoryForMyProject

Suivant

mvn org.Apache.maven.plugins:maven-compiler-plugin:compile

Suivant

mvn install

Cela créera un fichier jar dans le répertoire cible.

MyJarFile-1.0-jar-with-dependencies.jar

À présent

cd target

(Vous devrez peut-être exécuter: chmod + x MyJarFile-1.0-jar-with-dependencies.jar) Et enfin

Java -jar MyJarFile-1.0-jar-with-dependencies.jar

S'il te plait regarde 

https://cwiki.Apache.org/confluence/display/MAVEN/LifecyclePhaseNotFoundException

0
mycowan
  1. vérifiez que le fichier principal de MainClass est mis à jour en tant que fichier principal dans Propriétés> Exécuter
  2. Mettre à jour Build.xml avec le code suivant avant la fermeture de la balise de projet

<!-- 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}"/>

  1. Propriétés> Emballage> Tout cocher
  2. nettoyer et construire
  3. Télécharger sur le serveur.
0
gshivam63