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?
OK, a trouvé la réponse sur le site suivant: http://arunasujith.blogspot.com/2011/08/how-to-build-fat-jar-us-netbeans.html
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
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>
Accédez à votre build.xml et ajoutez le code juste avant la balise de projet de fermeture à la fin.
Maintenant changez la valeur du premier champ de propriété comme commenté
Cliquez sur Clean & Build, et votre jarre sera dans le dossier dist
Lien de référence: https://stackoverflow.com/a/30172829/2761273
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
<!-- 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}"/>