"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.
OS: macOS Catalina 10.15.6 JDK:14.0.1
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.
② ** 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
●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
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$
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.
À 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.
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