Sin confiar en ningún paquete externo, ¿cómo puede Maven generar un frasco ejecutable?
Si el POM no contiene ninguna referencia, simplemente agregue maven-jar-plugin al POM.
Proceso de solución
Cree un nuevo proyecto, solo una clase de función principal: xixi.java, salida Xixi Say: hello
El POM está configurado como
<MoupRid> com.paxi </proupid> <artifactid> xixi </arfactid> <versions> 1.0-snapshot </verse> <packaging> jar </paquete> <name> xixi </name> <url> http://maven.apache.org </url> <Proteies> <Project.Build.SourceEncoding> UTF-8 </project.build.sourceEncoding> </propiies>
Ejecutar mvn clean install para generar el paquete JAR xixi-1.0-SNAPSHOT.jar, ejecutar el comando jar y ejecutar error de retroalimentación
java -jar xixi-1.0-snapshot.jarxixi-1.0-snapshot.jar no tiene atributo manifiesto principal
Descomprima el jar jar xvf xixi-1.0-snapshot.jar para ver el archivo manifiesto correspondiente.mf
Cat Meta-Inf/Manifest.MfManifest-Versión: 1.0Archiver-Versión: Plexus ArchiverBuilt-by: paxicreated-by: Apache Maven 3.3.3Build-JDK: 1.8.0_121
Agregar complemento maven-jar-plugin en POM
<eded> <glugins> <glugin> <proupid> org.apache.maven.plugins </proupid> <artifactid> maven-jar-plugin </artifactid> <versión> 3.1.0 </versión> <figuration> <Achive> <Manifest> <MainClass> Com.Paxi.xixi </arinclass> </ACHACET> </ACHATUT </glugin> </glugins> </build>
Ejecutar una salida exitosa
java -jar xixi-1.0-snapshot.jar
Xixi dice: hola
Luego verifique el archivo Manifest.mf descomprimido como
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 //
Agregue dependencias en POM, ¿cómo genera Maven frascos ejecutables?
Debe usar complementos Maven-Dependency-Plugin y Maven-Jar-Plugin.
Proceso de solución
Solo agregue el paquete Apache-Commons a POM
<MoupRid> com.paxi </proupid> <artifactid> xixi </arfactid> <versions> 1.0-snapshot </verse> <packaging> jar </paquete> <name> xixi </name> <url> http://maven.apache.org </url> <Proteies> <Project.Build.SourceEncoding> UTF-8 </project.build.sourceEncoding> </propiESS> <Spendencies> <Spendency> <MoupRoMid> org.apache.commons </groupId> <AtifactId> Commons-Lang3 </artifactid> <PROPELACIÓN> 3.7 </versewers> </pendency> </spendencies>
Use una clase en el paquete común en el código
public static void main (string [] args) {string words = "xixi say: hello"; if (stringUtils.isnotblank (palabras)) {system.out.println (palabras); }}Se produjo un error después del embalaje
java -jar xixi-1.0-snapshot.jar
Excepción en hilo "principal" java.lang.noclassDeffoundError: org/apache/commons/lang3/stringUtils
en com.paxi.xixi.main (xixi.java:11)
Causado por: java.lang.classnotfoundexception: org.apache.commons.lang3.stringutils
en java.net.urlclassloader.findclass (urlclassloader.java:381)
en java.lang.classloader.loadclass (classloader.java:424)
en sun.misc.launcher $ AppClassLoader.LoadClass (Launcher.java:331)
en java.lang.classloader.loadclass (classloader.java:357)
... 1 más
Agregar complementos en POM
<eded> <glugin> <uproupid> org.apache.maven.plugins </groupid> <artifactid> maven-jar-plugin </arfactid> <versión> 3.1.0 </versión> <Configuration> <change> <Manifest> <Addclasspath> true </dclasspath> <mainclass> com.paxi.xixi </mainClasspath> <ClassPathPrefix> Libs/</classpathprefix> </changest> </chive> </figuration> </tugin> <tugin> <grupoid> org.apache.maven.plugins </proupid> <artifactID> maven-dependent-plugin </artifactid> <versole> 3.1.1 </sececution> <sececution> <sececution> <Di> copia-dependientes </id> <fase> paquete </fase> <estions> <pote> copy-dependents </pero> </pals> <necutatoration> <OutputDirectory> $ {Project.Build.Directory}/LIBS </OutputDirectory> </Configuration> </secution> </secutions> </glugin> </glugins> </build> build>Volver a correr
java -jar xixi-1.0-snapshot.jarxixi Say: Hola
El archivo manifest.mf es
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.xixi
No solo usa dependencias en POM sino también frascos de tres partes. ¿Cómo genera Maven frascos ejecutables?
El proceso de compilación requiere modificación del complemento de compilación maven-compiler-plugin . Al ejecutar, debe agregar un directorio de frascos de tres partes para ejecutar los comandos.
java -jar -djava.ext.dirs = lib/ target/ xixi -1.0 -snapshot.jarxixi Say: helloPapa: hola
Proceso de compilación y resolución
El código de prueba es
public static void main (string [] args) {string words = "xixi say: hello"; if (stringUtils.isnotblank (palabras)) {system.out.println (palabras); } Papa.say (); }Usar el comando MVN para ejecutar error
[Error] no pudo ejecutar el objetivo org.apache.maven.plugins: maven-compiler-plugin: 3.1: compilar (compile predeterminado) en el proyecto xixi: falla de compilación
xixi/src/main/java/com/paxi/xixi.java: [15,9] símbolo no encontrado
Agregar complemento de compilación a POM
<glugin> <uproupid> org.apache.maven.plugins </groupid> <artifactID> maven-compiler-plugin </artifactid> <versión> 3.1 </version> <necuteation> <compilinargs> <ghish> -djava.ext.dirs = lib/</ arg> </compilerargs> </configuration> </arg>>
Ejecución del paquete
Java -jar Target/xixi-1.0-snapshot.jarxixi Say: HelloException in Thread "Main" java.lang.noclassDeffoundError: com/paxi/papa en com.paxi.xixi.main (xixi.Java:15) causado por: java.lang.classnotfoundxception: com.papa java.net.urlclassloader.findclass (urlclassloader.java:381) en java.lang.classloader.loadclass (classloader.java:424) en sun.misc.launcher $ appclassloader.loadclass (Launcher.java:331) AT java.lang.classloader.loadclass (classloader.java:357) ... 1 más
Agregar parámetros para obtener el resultado
java -jar -djava.ext.dirs = lib/ target/ xixi -1.0 -snapshot.jarxixi Say: helloPapa: hola
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.