web-dev-qa-db-fra.com

Comment configurer la classe principale dans un fichier manifeste dans le fichier jar produit par le projet NetBeans

J'ai le problème suivant. J'ai un projet Java dans mon NetBeans IDE 6.8. Lorsque je le compile et qu'il génère un fichier .jar contenant tout ce qui est possible, le fichier META-INF n’est pas correct. Il ne contient pas la classe à exécuter - avec la méthode main (). 

Lorsque je clique sur le bouton Exécuter à l'intérieur de l'EDI, tout fonctionne. Les paramètres du projet sont également définis de manière appropriée: ils pointent vers une classe de mon projet.

J'ai essayé d'ajouter un dossier META-INF avec un fichier manifeste mais je n'y suis pas parvenu.

Est-il possible de le faire manuellement dans NetBeans, car j’ai constaté que si j’ajoutais la classe Main manquante dans le manifeste, tout fonctionnait.

(Je suppose que j'ai rencontré une sorte de bug ...)

//edit: Le résultat que je recherche est que je veux que le fichier jar créé avec la version de NetBeans soit exécutable avec la commande suivante:

Extrait de Documentation Sun :

Lorsque la classe principale est définie dans le fichier manifeste, vous pouvez exécuter l'application à partir de la ligne de commande: Java -jar app.jar

18
Leni Kirilov

Je vais faire un résumé des solutions proposées et de celle qui m'a aidé!

Après avoir lu ce rapport de bogue: bug dans la manière dont NetBeans 6.8 crée le jar pour un projet de bibliothèque Java.

  1. Créer un fichier manifest.mf à la racine de mon projet

  2. Éditez manifest.mf. Le mien ressemblait à ceci:

    Manifest-Version: 1.0
    Ant-Version: Apache Ant 1.7.1
    Created-By: 16.3-b01 (Sun Microsystems Inc.)
    Main-Class: com.example.MainClass
    Class-Path: lib/lib1.jar lib/lib2.jar
    
  3. Ouvrir le fichier /nbproject/project.properties

  4. Ajouter une ligne

    manifest.file=manifest.mf

  5. Clean + Construction du projet

Maintenant, le .jar est construit avec succès.

Merci beaucoup vkraemer

27
Leni Kirilov

Il semble que vous rencontriez un bogue dans la manière dont NetBeans 6.8 crée le fichier jar pour un projet de bibliothèque Java

Le problème implique qu'il existe une solution de contournement.

Je n'ai pas été en mesure de vérifier cela avec NB 6.8 et/ou NetBeans 6.9-dev ...

Vous voudrez peut-être vous inscrire au site Web/outil de suivi des problèmes de NetBeans.org, mettre à jour le problème et ajouter votre "vote".

4
vkraemer

C'est simple. 

  • Clic droit sur le projet
  • Aller à Propriétés
  • Aller à Exécuter dans l'arborescence Catégories
  • Définissez la classe Main dans le panneau de droite.
  • Construire le projet

C'est tout. J'espère que cela t'aides.

3

Dans la version 7.3, il suffit d'activer Propriétés/Construire/Compiler/Copier les bibliothèques dépendantes et la classe principale sera ajoutée au fichier manifeste lors de la construction en fonction de la cible sélectionnée.

1
Samuel Ventura

N'hésitez pas, mais examinez vos fichiers de projet après avoir construit votre projet pour la première fois. Recherchez un fichier manifeste et choisissez Ouvrir avec le bloc-notes.

Ajouter la ligne:

Main-Class: package.myMainClassName

package est votre paquet et myClassName est la classe avec la méthode main(String[] args).

0
madalitso Misomali

Ajouter manifest.file = manifest.mf dans project.properties et créer un fichier manifest.mf dans le répertoire du projet fonctionne correctement dans NB 6.9 et devrait également fonctionner dans NB 6.8.

0
Tomas Zezula

J'ai lu et lu et lu et lu pour comprendre pourquoi je recevais une erreur de classe non trouvée, il s'avère que le fichier manifest.mf avait une erreur dans la ligne: 

Main-Class: com.example.MainClass

J'ai corrigé l'erreur en allant dans Propriétés du projet dialogue (clic droit Fichiers du projet ), puis Exécuter et Classe principale et corriger ce que Netbeans avait décidé de mettre ici. Netbean a inséré le nom du projet à la place du nom de la classe. Aucune idée pourquoi. Probablement enivré sur muratina ...

0
githeko

C'est toujours un problème à partir de 7.2.1. Créez une bibliothèque parce que vous ne savez pas ce qu’elle fera si vous en faites une application et que vous êtes foutu.

Avez-vous trouvé comment résoudre ce problème? Editez nbproject/project.properties, modifiez la ligne suivante en false comme indiqué:

mkdist.disabled=false

Après cela, vous pouvez changer la classe principale dans les propriétés et cela sera reflété dans le manifeste.

0
Jeff Palmer

Le vrai problème est de savoir comment Netbeans JAR gère ses projets. Le "Class-Path:" dans le fichier Manifest n'est pas nécessaire lors de la publication de votre programme pour que d'autres puissent l'utiliser. Si vous avez une bibliothèque externe ajoutée à Netbeans, elle agit comme un paquet. Je vous suggère d'utiliser un programme tel que WinRAR pour afficher les fichiers dans le fichier jar et ajouter vos bibliothèques sous forme de packages directement dans le fichier jar.

A quoi devrait ressembler l'intérieur du fichier jar:

MyProject.jar

    Manifest.MF
         Main-Class: mainClassFolder.Mainclass

    mainClassFolder
         Mainclass.class

    packageFolder
         IamUselessWithoutMain.class
0
user1959349