Conseils utiles

Assemblée *

Pin
Send
Share
Send
Send


Dans les deux cas (IDE ou utilitaire pot) un fichier sera créé dans l'archive MANIFEST.MF. Comme je l'ai déjà écrit, il est judicieux de lire des informations sur les propriétés supplémentaires des fichiers JAR. Parce que tout est très bien écrit dans la documentation, je ne traiterai pas de la traduction. Passons donc au point suivant de notre parcours dans les fichiers JAR.

Ligne de commande

J'ai donc dit que la fonction principale du JAR est de contenir un ensemble de classes sous forme de fichiers de classe. Nous devons maintenant comprendre comment connecter les fichiers JAR à la classe d'exécution afin que celle-ci puisse utiliser les classes du fichier JAR.
Comme vous le savez déjà bien, exécuter un programme Java implique de démarrer la machine virtuelle Java (pour Windows, il s’agit du fichier java.exe, pour Unix, c’est java) et de lui transmettre le nom de la ligne de commande de la classe que vous souhaitez exécuter. Par exemple, pour exécuter une classe Premier en paquet edu.javacourse.test nécessaire dans le répertoire dans lequel se trouve le répertoire edu / javacourse / test tapez la commande suivante:

Comme vous pouvez le constater, nous avons passé le nom complet de la classe à exécuter en argument. En plus du nom de classe, la machine virtuelle Java accepte de nombreux paramètres qui vous permettent de configurer certaines propriétés de la machine virtuelle. Dans cet article, nous analyserons un élément très important: CLASSPATH - qui est utilisé pour connecter des fichiers JAR.
Nous allons maintenant passer à travers le cycle complet de création du fichier JAR et de le connecter sans utiliser l'IDE. Je suis très sensible à la capacité du programmeur à utiliser la ligne de commande. Premièrement, cela montre que vous comprenez vraiment l'essence, et deuxièmement, cette compétence est tout simplement très utile. Par exemple, dans le même système Unix / Linux, il est beaucoup plus pratique de travailler sur la ligne de commande et certains produits contiennent des utilitaires pouvant être exécutés à partir de la ligne de commande. Alors allons-y.
Créer un répertoire Javaesson (en principe, nous l'avons déjà créé dans la section Etapes de base. Dans ce répertoire, nous allons créer la structure de répertoires. Jarlib / edu / javacourse / jar. À l'aide d'un éditeur de texte, créez un fichier. SayHello.java

Notre structure de répertoire devrait ressembler à ceci:

Le moment est venu pour la ligne de commande. Nous lançons la commande cmd (si vous ne vous en souvenez pas - nous regardons la section Etapes de base). Aller au répertoire JavaLesson / JarLib et nous y compilons d'abord notre fichier SayHello.java une telle équipe

Une fois la compilation réussie, créez un fichier JAR à l’aide de la commande

Si tout a fonctionné pour vous, alors dans le catalogue JavaLesson / JarLib un fichier devrait apparaître say.jar.
Maintenant, écrivons une petite classe que notre classe utilisera Sayhello. IMPORTANT Pour la "pureté de l'expérience", créez cette classe dans le répertoire Javaesson. Je suggère de créer une classe sans utiliser de paquetages (bien que cela ne devrait pas être la règle - dans de vrais projets, il n’est pas nécessaire de créer des classes sans paquet). Voici notre dossier UtilisezHello.javaqui sera situé dans le répertoire Javaesson

Faites attention à la première ligne - nous y importons la classe Sayhello. En méthode principal nous créons un objet et appelons sa méthode. Notre structure de répertoire devrait ressembler à ceci:

Maintenant, nous devons compiler notre classe merveilleuse. Nous essayons une équipe javac. ATTENTION Nous sommes dans le catalogue Javaesson.

Et nous obtenons l'erreur:

Le message dans ce cas est assez informatif - "UseHello.java:1: erreur: le package edu.javacourse.jar n'existe pas" et "UseHello.java:6: erreur: le symbole ne peut pas être trouvé". Nous n'avons pas connecté notre classe Sayhello - le compilateur ne sait pas où le trouver et d'où provient un tel paquet / classe - edu.javacourse.jar.SayHello. Bien - paraphrasant les classiques - "Votre mot, camarade CLASSPATH."
Évidemment, nous devons dire au compilateur qu’il doit utiliser non seulement les fichiers JAR qu’il a déjà - le même rt.jar - mais aussi notre fichier JAR. Ceci est fait en utilisant une option spéciale au démarrage du compilateur.

Dans cette commande nous avons ajouté une ligne -cp JarLib / say.jar. Partie -cp indique qu'il doit être suivi d'une liste de fichiers JAR contenant les classes nécessaires. La liste peut inclure plusieurs fichiers, séparés par “,” pour Windows et “:” pour Unix / Linux. Par exemple, si je dois spécifier deux fichiers - say1.jar et say2.jar - situés dans le répertoire C: / Anton / Bibliothèques, alors la commande (pour Windows) ressemblerait à ceci:

Au fait, “-cp” est un raccourci pour classpath - Auparavant, il fallait écrire de cette façon, et maintenant c'est aussi possible.

Il est également important de noter que dans CLASSPATH, vous pouvez inclure non seulement des fichiers JAR, vous pouvez également inclure le chemin du répertoire avec les fichiers .class (à nouveau, plusieurs d'entre eux peuvent être indiqués). Si nous n'avons pas créé de fichier JAR say.jar, mais utilisé le fichier compilé SayHello.class du catalogue Jarlib, alors la commande ressemblerait à ceci:

Vous pouvez demander - pourquoi avons-nous indiqué le chemin uniquement à Jarlib, mais pas tout le répertoire avec le fichier SayHello.class. Le fait est que, Puisque notre fichier est contenu dans un paquet, nous devons spécifier le chemin du paquet, et il se trouve dans le répertoire Jarlib. Vous pouvez spécifier le chemin complet (plutôt que relatif) - comme ceci:

Eh bien, nous avons réussi à compiler, il est temps d’organiser notre magnifique cours. Très probablement, vous avez déjà deviné qu'au démarrage, nous devons également spécifier notre fichier. say.jar et l'équipe devrait ressembler à quelque chose comme ça. ATTENTION Nous sommes dans le catalogue Javaesson.

Mais lorsque vous exécutez ce programme, nous échouons. Voici le message produit par la machine virtuelle Java:

JVM ne peut pas trouver notre classe. Comment ça se passe ici dans ce répertoire? Le truc, c'est que lorsque vous spécifiez CLASSPATH sur la ligne de commande, la machine virtuelle Java ne prend les classes que de ces fichiers / répertoires. Et notre dossier de classe Usehello situé dans le répertoire CURRENT, qui n'est pas spécifié. Voici une telle épidémie. Nous devons également indiquer à la machine virtuelle Java de prendre des fichiers du répertoire en cours. Ceci est fait comme ceci - dans le CLASSPATH, vous devez spécifier le symbole ".". Ce sera le répertoire actuel. Notre équipe devrait ressembler à ceci:

Eh bien, maintenant tout devrait s'arranger et nous verrons l'inscription BONJOUR.
Une mise au point avec CLASSPATH peut vous jouer un joli tour. Le fait est que la machine virtuelle Java utilise une variable d’environnement appelée CLASSPATH. Pour Windows, il est défini de la même manière que les variables PATH et JAVA_HOME - nous l'avons fait dans la section Installation de JDK. Cette variable spécifie l'ensemble des fichiers JAR et des répertoires que la JVM utilisera si vous NE spécifiez PAS CLASSPATH lors du démarrage de votre programme.
Certains programmes créent (ou mettent à jour) la variable d'environnement CLASSPATH lors de l'installation et peuvent même ne rien vous dire. Et donc vous commencez votre classe à partir de la ligne de commande, et la machine virtuelle Java ne la voit pas. Pourquoi qu'il dpzkf la variable "CLASSPATH" et qu'il n'a pas le symbole ".". Dans ce cas, ce que nous avons déjà vu se produit: les fichiers du répertoire actuel ne sont pas chargés. Alors sois prudent.

Connecter les fichiers JAR dans l'EDI NetBeans

Parce que Dans ce cours, j’utilise NetBeans pour démontrer qu’il sera probablement erroné de ne pas montrer comment activer JAR dans cet environnement. Comme je l'ai mentionné, s'il reste du temps pour d'autres IDE, je les écrirai dans le même article. Mais je ne pense pas que ce sera dans un proche avenir.
Si vous regardez la fenêtre de service «Projets», qui se trouve généralement à gauche, vous pouvez voir la structure de votre projet dans celle-ci, qui contient la section «Bibliothèques». J'ai créé deux projets Sayhello et Usehello

En fichier ouvert UtilisezHello.java la toute première ligne montre que le compilateur y jette une erreur - comme nous le savons déjà, cela indique l'absence de la classe requise. En principe, les IDE vous permettent de connecter non seulement des fichiers JAR prêts à l'emploi, mais également des projets, mais nous n'utiliserons pas cette fonction (dans ce cas, plus précisément). Pour connecter une bibliothèque d'un projet Sayhello Tout d’abord, nous devons construire ce projet avec l’équipe de construction. Nous pouvons voir le résultat dans le catalogue dist. On peut y voir le fichier SayHello.jar. Anticiper la question - pouvez-vous changer le nom du fichier - pour que le fichier soit créé avec un nom différent, vous devez corriger le fichier de configuration nbproject / project.properties. Trouvez dedans une option avec le nom dist.jar Et changez le nom du fichier. En général, pas très pratique. Donc, d'habitude je ne le fais pas.
Maintenant, nous devons connecter le fichier JAR fini à notre deuxième projet. Usehello. Il y a plusieurs façons de le faire.

  1. Cliquez avec le bouton droit de la souris sur l'élément «Bibliothèques» dans la structure du projet et sélectionnez «Ajouter un fichier JAR / dossier». Après avoir sélectionné un fichier, vous pouvez le voir sous la branche «Bibliothèques».
  2. Clic droit sur un projet Usehello dans la fenêtre «Projets» et dans le menu déroulant, sélectionnez l’item (généralement le plus bas) «Propriétés». Dans la boîte de dialogue qui s'ouvre, sélectionnez «Bibliothèques» à gauche et utilisez le bouton «Ajouter un fichier JAR / dossier» dans l'onglet «Compiler».


Je suggère également de regarder l'onglet "Run". Vous pouvez voir qu’au démarrage, ces bibliothèques seront connectées lors de la compilation des sources («Classpath for Compiling Source»).

Vous pouvez terminer sur ce sujet, bien que le processus d’apprentissage soit sans fin et que vous trouverez probablement beaucoup d’informations intéressantes sur l’utilisation et la création de fichiers jar.

Le code source des projets NetBeans peut être téléchargé ici. La bibliothèque en eux doit être connecté indépendamment. Donc, vous pouvez pratiquer. Bonne chance

Et maintenant, le prochain article nous attend: Multithreading - les premiers pas.

Bases de Java

30 nov. 2008 01h47

Avec:
NetBeans - IDEE, Vista 32 bits - Axis, JFrame - un programme qui fonctionne à partir du plateau, SE - programmeur.

Cession:
essayez d’obtenir le fichier * .jre convoité auprès de NetBeans, s’il existe du code prêt à l’emploi, code octet dans les classes.

Préface: Je n'ai jamais compilé un programme avec mes mains - tout le temps à AyDEE. MAIS NetBeans crée un fichier * .jre uniquement pour le fichier principal .java.

Je le lis un peu, mais c’est difficile à comprendre avec l’expérience - les articles dont j’ai besoin ne sont pas suggestifs.

Montre au moins où des commandes spécifiques expliquent comment créer un fichier * .jre à partir de DOS.

TÂCHE PRINCIPALE: le programme doit être lancé en double-cliquant sur la souris, et non à partir d'IDEA (c'est le PROBLÈME PRINCIPAL).

Ne juge pas strictement

Modifié le: 30 nov. 2008 12:31
30 nov. 2008, 2h53

Pourquoi jre? Peut-être un pot?

Dans NetBeans, vous devez sélectionner le projet de construction et vous avez terminé. Il vous dira où chercher vos archives.

MAIS NetBeans crée un fichier * .jre uniquement pour le fichier principal .java.

S'il s'agit encore de JAR, il ne s'agit que d'une archive. Sous Windows, ça commence comme ça. Double-cliquez Maximum - créer un pseudo batte.

30 nov. 2008 à 14h17

jar est une archive ZIP régulière. La seule caractéristique est la présence du dossier META-INF. En outre, d'autres fichiers peuvent être présents dans ce dossier, qui peuvent être lus dans différents didacticiels. Utilisation des fichiers JAR: notions de base, Présentation du fichier Jar, Leçon: Empaquetage de programmes dans des fichiers JAR.

Brève compression:
créer jar jar cf fichier-jar fichier (s) d'entrée
créez jar avec votre fichier de manifeste jar cmf manifeste jar-fichier fichier-entrée

Lorsque le fichier jar est démarré en double-cliquant, la commande java -jar jar-file est réellement exécutée. Pour que cette commande fonctionne, la classe de départ doit être spécifiée dans le manifeste:

Si d'autres fichiers jar sont nécessaires au travail, ils doivent être répertoriés dans le manifeste, car ni l'argument de ligne de commande -jar ni la variable d'environnement CLASSPATH ni l'argument -cp (également appelé -classpath) ne sont ignorés:

L'association elle-même, indiquant comment le fichier jar doit être lancé, est dans le registre. Ce sujet a été discuté à plusieurs reprises sur le forum. Lors de l'installation d'un JRE ou d'un JDK, cette association est enregistrée automatiquement. Il n'est donc pas nécessaire de le faire vous-même.

En fait, il est préférable de déléguer l’assemblée à quelque chose comme fourmi ou maven - le faire à chaque fois avec vos mains est le travail supplémentaire de PMSM.

30 nov. 2008 à 14h39

Oui en effet. Besoin d'un fichier JAR.
Lorsque j'exécute "build main project (F11)" pour le projet, le fichier JAR est créé pour la classe principale (Main.java).

la structure du fichier .java est elle-même
Projet-> package-> Main.java

Il serait peut-être préférable de simplement créer un projet sans package avec le nom de mon fichier .java. Je vais essayer d'écrire un pot.

Et sur la question de la création d'un pseudo chauve-souris: comment l'assembler?

30 nov. 2008 à 14h47
30 nov. 2008 à 15h17

Maintenant la question est:
lorsque vous exécutez "cmd.exe", le chemin initial est indiqué: "C: Windows system32"
pour arriver à conduire E, il suffisait d'entrer "e:".

Et quoi écrire pour accéder au dossier: "E: Java NetBeansExamples"?

30 nov. 2008 à 15h27
Modifié le: 01 déc 2008 à 12:46
30 nov. 2008 à 15h28

Maintenant la question est:
lorsque vous exécutez "cmd.exe", le chemin initial est indiqué: "C: Windows system32"
pour arriver à conduire E, il suffisait d'entrer "e:".

Et quoi écrire pour accéder au dossier: "E: Java NetBeansExamples"?

30 novembre 2008 18:32

Je continue à creuser, même si je comprends que la pelle est encore petite.

maintenant pour mon problème:
néanmoins, il a créé le fichier jar (il l’a fait à la fois dans le répertoire où se trouvait le fichier .java et dans la racine). En conséquence, un fichier est apparu, au lancement de qui apparaît
Message de Java Virtual Machine Launcher:
Impossible de charger l'attribut manifesr de Main-Class à partir du chemin nomfichier.jar

Je ressens les lacunes et les problèmes avec CLASSPATH. Quel répertoire devez-vous spécifier pour que le fichier .jar démarre "rapidement et correctement"?

Je sais aussi déjà que vous pouvez utiliser un fichier bat pour exécuter des applications virtuellement avec une machine Java.

Et encore une chose: vous devez créer une archive JAR à partir de fichiers .java ou de classes.

Quelque chose que je suis complètement confus, j'ai probablement besoin de manger :)

30 nov. 2008, 22h36
30 nov. 2008, 22h42

Ça dit ça. qu'il n'y a pas d'attribut Main-Class dans le manifeste, ce qui indique la classe d'application à lancer. Vous devez créer votre fichier manifeste, y inclure l'attribut et spécifier le fichier manifeste avec la création du fichier jar.

Batte à exécuter à partir du gestionnaire de fichiers est la pire option. Dans tous les cas, vous verrez une fenêtre de console. Sauf si vous écrivez un programme de console. Et il vaut mieux courir à travers Ink.

01 déc 2008 à 11h27

Sound intuition me dit que les fichiers Java dans lesquels est écrit le bytecode de l'interpréteur. )

Comment activer l'attribut Main-Class (syntaxe de commande)?
. ou est-il nécessaire de spécifier un attribut manifeste dans un fichier jar? Alors comment faire cela lors de la création de jar-a?
Et le fichier manifeste devra également être stocké pour exécuter l'archive jar côte à côte, ou juste quelque part sur la machine? (Cette question concerne déjà le développement général)

01 décembre 2008 12:23

Dès que vous prouvez l'existence de tels fichiers dans des conditions naturelles, je suis d'accord avec vous. Astuce: dans * .java, le code source lisible du programme est enregistré dans * .class - code octet lisible par machine. Pourquoi compiler * .java en * .class en général, s’il est possible d’exécuter du code directement à partir de la source à la BASIC?

parle de votre manque total de compréhension du sujet.

01 décembre 2008 à 18h30

commençons par le début.
il y a un code (ça n'a rien à voir avec l'essence)

qui se trouve dans le fichier: "E: Java Apps SE src test MyFFrame.java"
le bytecode est dans le fichier: "E: Java Apps SE build classes test MyFFrame.class"
(sur la question de la hiérarchie - je travaille avec NetBeans)

Sous DOS, accédez au dossier "E: Java Apps SE build classes test" (après tout, notre code secondaire est dans le fichier "MyFFrame.class")
et donnez la commande (comme indiqué dans http://java.sun.com/docs/books/tutorial/deployment/jar/build.html) "" jar cf MyApp.jar MyFFrame.class

nous obtenons un autre fichier "MyApp.jar" dans le répertoire "E: Java Apps SE build classes test"

Double-cliquez sur le fichier jar créé et recevez un message du lanceur de machine virtuelle Java: Échec du chargement de l'attribut manifesr de Main-Class à partir de E: Java Apps SE build classes test MyApp.jar.
Le problème est prétendument que la classe principale n'est pas enregistrée dans le fichier "manifest.mf".

Eh bien, nous allons dans "MyApp.jar" comme dans une archive normale via WinRAR3_42.exe
Composition de l'archive:
- dossier "META-INF" (à l'intérieur se trouve le fichier "MANIFEST.MF")
- fichier "MyFFrame.class"

Le contenu du fichier "MANIFEST.MF":

Vraisemblablement, une entrée devrait être ajoutée à ce fichier indiquant que la classe principale est "MyFFrame.class". Pour ce faire, ouvrez le fichier préféré "MANIFEST.MF" avec des poignées (via le bloc-notes) et ajoutez la dernière ligne.
n'oubliez pas de mettre un "Enter" après la dernière ligne (au total, après le texte entier, il devrait y avoir 2 (deux). lignes vides).

Enregistrez le fichier avec la combinaison de touches "Ctrl + S". On nous demande: "Update file in archive?" - on clique sur OUI!

Pin
Send
Share
Send
Send