Sans compter sur un package externe, comment Maven peut-il générer un pot exécutable?
Si le POM ne contient aucune référence, ajoutez simplement maven-jar-plugin au POM.
Processus de solution
Créez un nouveau projet, une seule classe de fonction principale: xixi.java, sortie Xixi Say: hello
Le pom est configuré comme
<GroupId> com.paxi </proupId> <Artifactid> XIXI </ artifactId> <DERNÉRATION> 1.0-SNAPSHOT </ Version> <Packaging> Jar </maven.apache.org </url> <url> http://maven.apache.org </url> <properties> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> </ properties>
Exécuter mvn clean install pour générer un package JAR xixi-1.0-SNAPSHOT.jar, exécuter la commande jar et exécuter une erreur de rétroaction
java -jar xixi-1.0-snapshot.jarxixi-1.0-snapshot.jar n'a pas d'attribut manifeste principal
Décompressez le pot JAR XVF XIXI-1.0-Snapshot.jar pour afficher le fichier correspondant manifeste.mf
Cat Meta-Inf / Manifest.Mfmanifest-Version: 1.0 Archiver-Version: Plexus ArchiverBuilt-By: Paxicreated-by: Apache Maven 3.3.3Build-JDK: 1.8.0_121
Ajouter le plugin maven-jar-plugin dans POM
<Duild> <Glugins> <Glugin> <GroupId> org.apache.maven.plugins </prôdID> <Rerifactive> Maven-Jar-Plugin </ ArfactId> <Dersion> 3.1.0 </ Version> <Fonfitial> <Carchive> <Mans Manifest> <MainClass> COM.Paxi.Xixi </ MainClass> </ Manifest> </gingin> </granins> </ build>
Exécuter une sortie réussie
java -jar xixi-1.0-snapshot.jar
XIXI Say: Bonjour
Vérifiez ensuite le fichier manifeste.mf décompressé comme
Cat Meta-Inf / Manifest.Mfmanifest-Version: 1.0built-by: Paxicreated-by: Apache Maven 3.3.3Build-JDK: 1.8.0_121Main-Class: Com.paxi.xixi // ajouté
Ajouter des dépendances dans POM, comment Maven génère-t-il des pots exécutables?
Vous devez utiliser des plugins Maven-Dependance-Plugin et Maven-Jar-Plugin.
Processus de solution
Ajoutez uniquement le package Apache-Commons à POM
<GroupId> com.paxi </proupId> <Artifactid> XIXI </ artifactId> <DERNÉRATION> 1.0-SNAPSHOT </ Version> <Packaging> Jar </maven.apache.org </url> <url> http://maven.apache.org </url> <properties> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> </properties> <dedences> <dependency> <proupId> org.apache.commons </proupId> <ArtifActid> Commons-Lang3 </ Artifactid> <version> 3.7 </DERNIERSE> </DENDENCENCY>
Utilisez une classe dans le package commun dans le code
public static void main (String [] args) {String words = "xixi dia: Bonjour"; if (stringUtils.isnotblank (mots)) {System.out.println (mots); }}Une erreur s'est produite après l'emballage
java -jar xixi-1.0-snapshot.jar
Exception dans Thread "Main" java.lang.noclassdeffounderror: org / apache / commons / lang3 / stringutils
sur com.paxi.xixi.main (xixi.java:11)
Causé par: java.lang.classnotfoundException: org.apache.commons.lang3.stringutils
sur java.net.urlclassloader.findclass (urlclassloader.java:381)
sur java.lang.classloader.loadclass (classloader.java:424)
sur Sun.Misc.Launcher $ AppClassloader.Loadclass (Launcher.java:331)
sur java.lang.classloader.loadclass (classloader.java:357)
... 1 de plus
Ajouter des plugins dans POM
<Duild> <Glugin> <GroupId> org.apache.maven.plugins </prôdId> <Artifactid> Maven-Jar-Plugin </ ArtiFactId> <DERSE> 3.1.0 </ Version> <DaFIGRUPTION> <Carchive> <Affectest> <DddClassPath> true </dddClasspath> <MainClass> com.paxi.xixixi <ClasspathPrefix> libs / </ classpathprefix> </ manifest> </ archive> </ configuration> </gingin> <plugin> <proupId> org.apache.maven.plugins </prouprid> <letefactId> maven-dépendante-pllugin </ artifactid> <version> 3.1.1 </Dection> <id> Copy-Dependents </id> <masy> package </ phase> <objectif> <objectif> Copy-Dependents </ but> </ buts> <figinguration> <putputdirectory> $ {project.build.directory} / libs </ outputDirectory> </ Configuration> </ Execution> </Eamaling> </gingin> </Glugrins> </ build>Retirer
java -jar xixi-1.0-snapshot.jarxixi dit: Bonjour
Le fichier manifeste.mf est
Cat Meta-Inf / Manifest.Mfmanifest-Version: 1.0built-by: Paxiclass-Path: Libs / Commons-Lang3-3.7.jarcreated-by: Apache Maven 3.3.3build-jdk: 1.8.0_121main-class: com.paxi.xixidi
Non seulement il utilise des dépendances dans POM mais aussi des pots tridits. Comment Maven génère-t-il des pots exécutables?
Le processus de compilation nécessite une modification du plugin de compilation maven-compiler-plugin . Lors de l'exécution, vous devez ajouter un répertoire de pots triparties pour exécuter les commandes.
java -jar -djava.ext.dirs = lib / target / xixi-1.0-snapshot.jarxixi dit: Hellopapa dit: Bonjour
Processus de compilation et de résolution
Le code de test est
public static void main (String [] args) {String words = "xixi dia: Bonjour"; if (stringUtils.isnotblank (mots)) {System.out.println (mots); } Papa.say (); }Utilisez la commande mvn pour exécuter une erreur
[Erreur] Échec de l'exécution de but org.apache.maven.plugins: maven-compiler-plugin: 3.1: compile (par défaut-composi
xixi / src / main / java / com / paxi / xixi.java: [15,9] symbole non trouvé
Ajouter un plugin de compilation à POM
<harin> <proupId> org.apache.maven.plugins </prômId> <Artifactid> maven-compiler-plugin </letifactid> <version> 3.1 </-version> <finiguration> <compilerargs> <gg> -djava.ext.Dirs = lib / </gg> </ compillerargs>
Exécution du package
Java -Jar Target / XIXI-1.0-Snapshot.jarxixi Say: HelloException dans Thread "Main" Java.lang.NoclassdeffoundError: com / paxi / papa at com.paxi.xixi.main (xixi.java:15) causé par: java.lang.classnotfot java.net.urlclassloader.findclass (urlclassloader.java:381) sur java.lang.classloader.loadclass (classloader.java:424) sur sun.mis.launcher $ appclassloader.loadclass (lanceder.java:331) java.lang.classloader.loadclass (classloader.java:357) ... 1 de plus
Ajouter des paramètres pour obtenir le résultat
java -jar -djava.ext.dirs = lib / target / xixi-1.0-snapshot.jarxixi dit: Hellopapa dit: Bonjour
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.