Générer et exécuter le fichier Jar du fichier Java appartenant au package

Aperçu

"Introduction à Java bien comprise, 2e édition" Chapitre 13 Lorsque je travaillais sur les exercices 13-2 et 13-3 Je suis tombé sur la génération d'un fichier Jar pour un fichier de classe appartenant à un package et sur l'exécution d'un fichier Jar. Je vais vous présenter ce que j'ai fait à ce moment-là dans cet article.

environnement

OS: macOS Catalina 10.15.6 JDK:14.0.1

Statut

Exécuter dans le terminal

(1) Générer un fichier Jar de "Main.java" stocké dans le paquet "hoge"

//Définir le répertoire actuel
HIrokinoMacBook-Pro:~ user$ cd /Users/user/src/Java/sukiri1/Chapter6/hoge
//Générer un pot
HIrokinoMacBook-Pro:hoge user$ jar -cvfm test.jar manifest.txt Main.class
Manifeste ajouté
Main.la classe est ajoutée(Entrer=417)(En dehors=284)(31%Rétréci)

"Test.jar" a été créé dans / Users / user / src / Java / sukiri1 / Chapter6 / hoge. スクリーンショット 2020-08-26 23.06.24.png

② ** Le Jar généré ne peut pas être exécuté **

//exécution de fichier jar
HIrokinoMacBook-Pro:hoge user$ java -jar test.jar
Erreur:Hoge de classe principale.Impossible de trouver et de charger Main
Cause: java.lang.ClassNotFoundException: hoge.Main

Contenu de chaque fichier

●Main.java Stocker la classe principale dans le package hoge

package hoge;
public class Main {
	public static void main(String[] args) {
		System.out.println("hello.java");
  	}
}

Stocké dans le répertoire suivant /Users/user/src/Java/sukiri1/Chapter6/hoge/Main.java

● Contenu du manifeste

Manfest-Version: 1.0
Main-Class: hoge.Main

↓ Référence https://ameblo.jp/syosinsyaprogram/entry-11775802006.html http://daiad.webcrow.jp/java/jar.html

approche

(1) Définissez la hiérarchie dans laquelle le package est stocké dans le répertoire courant

Initialement, le répertoire courant était défini sur "cd / Users / user / src / Java / sukiri1 / Chapter6 / hoge", Changez pour "cd / Users / user / src / Java / sukiri1 / Chapter 6" (placez un niveau plus haut)

HIrokinoMacBook-Pro:hoge user$ cd /Users/user/src/Java/sukiri1/Chapter6
HIrokinoMacBook-Pro:Chapter6 user$ 

(2) Spécifiez que le fichier manifeste txt et le fichier de classe inclus dans la commande jar generation sont inclus dans le package.

Initialement, c'était "jar -cvfm test.jar manifest.txt Main.class", mais il a ajouté "hoge /" au fait que "manifest.txt" et "Main.class" sont inclus dans le paquet "hoge". Spécifiez ce qui suit et exécutez dans le terminal.

jar -cvfm test.jar hoge/manifest.txt hoge/Main.class

"Test.jar" est créé dans / Users / user / src / Java / sukiri1 / Chapter6. スクリーンショット 2020-08-26 23.08.02.png

À propos de ①② Si vous générez un fichier jar avec le répertoire courant défini dans le package ("hoge" dans ce cas), Un fichier jar sera créé dans lequel le package n'existe pas dans le fichier jar. (Dans ce cas, pot sans paquet "hoge")

Par conséquent, lorsque j'ai exécuté le fichier jar avec "java -jar", il a été spécifié comme "hoge.Main" dans le "Main-Class:" du manifeste. Le fichier jar réellement généré n'a pas le "Main.class" stocké dans le package "hoge", Comme cette fois, il dit "Erreur: Impossible de trouver et de charger la classe principale hoge.Main" Il a été souligné que "je n'ai pas trouvé la classe hoge.main?"

Maintenant, exécutons le pot.

HIrokinoMacBook-Pro:Chapter6 user$ java -jar test.jar
hello.java

Réussi.

À la fin

Si vous obtenez une erreur similaire lors de la création et de l'exécution d'un fichier jar à l'aide du manifeste Le répertoire actuel est-il approprié et la configuration du package est-elle appropriée pour la commande jar generation? C'est une bonne idée de revoir comment le "Main.class" dans le manifeste est écrit!

Recommended Posts

Générer et exécuter le fichier Jar du fichier Java appartenant au package
L'histoire de l'oubli de fermer un fichier en Java et de l'échec
Générer le code source à partir du fichier JAR avec JD-GUI du projet Java Decompiler
JAVA: jar, aar, affichez le contenu du fichier
Renommez le nom du package d'un fichier jar existant
<java> Lire le fichier Zip et le convertir directement en chaîne
[Java] Types de commentaires et comment les rédiger
[Java] Récupère le fichier dans le fichier jar quel que soit l'environnement
Comment exécuter l'exemple WebCamCapture de NyARToolkit pour Java
[Java] [Maven] Modèle de pom.xml pour enregistrer le fichier jar tiers dans le référentiel local
Je veux savoir quelle version de java le fichier jar que j'ai est disponible
Méthode de paramétrage pour lier Java d'Eclipse et Github / septembre 2017
J'ai essayé de résumer les bases de kotlin et java
Commande pour vérifier le nombre et l'état des threads Java
Avantages et inconvénients de Java
Comment modifier le contenu du fichier jar sans décompresser
[Java] Je veux vraiment connecter MySQL !!! ~ À propos de l'obtention du pilote JDBC et de l'emplacement du fichier JAR ~
[Java] Divers résumés joints aux chefs de classe et aux membres
[Java] Générer un URI de données à partir d'une chaîne d'octets du contenu du fichier [Kotlin]
Bases du développement Java ~ Comment écrire des programmes (variables et types) ~
Collection de tâches de programmation sélectionnées à réaliser et à mémoriser (bases de Java)
Lire les 4 premiers octets du fichier de classe Java et générer CAFEBABE
De Java naissant (3 ans) à Node.js (4 ans). Et l'impression de retourner à Java
J'ai essayé de résumer les méthodes de Java String et StringBuilder
Comment obtenir la longueur d'un fichier audio avec Java
Remplacez le contenu du fichier Jar
À propos de Biocontainers fastqc et Java
Résumé du package [Java Silver Study]
[Java] Entrez dans le stdin du processus
Enregistrer la sortie dans un fichier en Java
Remarques sur le chemin et le package Java
Je veux afficher des images avec REST Controller de Java et Spring!
[Java] Créez un fichier jar compressé et non compressé avec la commande jar
Comment enregistrer JFR (Java Flight Recorder) et générer un fichier de vidage
Comment savoir quelle version Java d'un fichier de classe a été compilée
[Java] Notez comment utiliser RecyclerView et comment implémenter le traitement par balayage animé.
[Cas d'amélioration Java] Comment atteindre la limite de l'auto-apprentissage et au-delà
J'ai essayé de traduire la grammaire de R et Java [Mis à jour de temps en temps]
Comment lire le fichier de paramètres log4j dans un projet Java assemblé dans un fichier jar Memo
[Java] Comment utiliser la classe File
Après 3 mois de formation Java et Spring
[java] Résumé de la gestion des caractères
Comment ajouter un fichier jar dans ScalaIDE
Implémentation Java pour créer et résoudre des labyrinthes
[Java] Comment sortir et écrire des fichiers!
[Java / Swift] Comparaison de l'interface Java et du protocole Swift
[Java] [Maven3] Résumé de l'utilisation de Maven3
[Java 7] Divisez la liste Java et exécutez le processus
Sortie du livre "Introduction à Java"
[Introduction à Java] À propos des déclarations et des types de variables
Exemple pour décompresser le fichier gz en Java
[Java8] Recherchez le répertoire et récupérez le fichier
Résumé de Java Math.random et import (calendrier)
[Java] Contenu de l'interface de collection et de l'interface de liste
De Java à C et de C à Java dans Android Studio
Discrimination d'énum dans Java 7 et supérieur