Tanpa mengandalkan paket eksternal apa pun, bagaimana Maven dapat menghasilkan toples yang dapat dieksekusi?
Jika POM tidak berisi referensi apa pun, cukup tambahkan maven-jar-plugin ke POM.
Proses solusi
Buat proyek baru, hanya satu kelas fungsi utama: xixi.java, output Xixi Say: hello
POM dikonfigurasi sebagai
<groupId> com.paxi </proveDid> <ArTifactId> xixi </artifactid> <version> 1.0-snapshot </version> <packaging> Jar </mackaging> <name> xixi </name> <rerl> http://maven.apache.org </url> <roperti> <Project.build.sourceencoding> UTF-8 </project.build.sourceencoding> </PROPERIES>
Jalankan mvn clean install Untuk Menghasilkan Paket JAR xixi-1.0-SNAPSHOT.jar, Jalankan perintah JAR, dan jalankan kesalahan umpan balik
java -jar xixi-1.0-snapshot.jarxixi-1.0-snapshot.jar tidak memiliki atribut manifes utama
Decompress The Jar Jar XVF XIXI-1.0-Snapshot.jar untuk melihat file manifest.mf yang sesuai
Cat Meta-Inf/Manifest.MFManifest-Versi: 1.0Archiver-Versi: Plexus ArchiverBuilt-by: Paxicreated-by: Apache Maven 3.3.3Build-JDK: 1.8.0_121
Tambahkan plugin maven-jar-plugin di pom
<build> <dlugin> <lugin> <Groupid> org.apache.maven.plugins </plorgid> <t Artifactid> maven-jar-plugin </t Artifactid> <version> 3.1.0 </version> <Configuration> <CRIFIVE> <IMANSIT> <ACANTERCLASS> COM.PAXI.XIXI <CRIFIURE> <ARCRIVE> <IPRIFEST> <ACANACLASS> COM.PAXI.XIXI <CRIFIURE> <ARCRIVE> <ICRIFEST> <ACANTERCLASS> </lugin> </lugin> </bangun>
Jalankan output yang berhasil
java -jar xixi-1.0-snapshot.jar
Xixi Say: Halo
Kemudian periksa file manifest.mf yang didekompresi sebagai
Cat Meta-Inf/Manifest.MFManifest-Versi: 1.0Built-by: Paxicreated-by: Apache Maven 3.3.3Build-JDK: 1.8.0_121Main-Class: com.paxi.xixi // ditambahkan
Tambahkan dependensi di POM, bagaimana Maven menghasilkan stoples yang dapat dieksekusi?
Anda perlu menggunakan plugin maven-dependency-plugin dan maven-jar-plugin.
Proses solusi
Tambahkan saja paket Apache-Commons ke POM
<groupId> com.paxi </proveDid> <ArTifactId> xixi </artifactid> <version> 1.0-snapshot </version> <packaging> Jar </mackaging> <name> xixi </name> <rerl> http://maven.apache.org </url> <roperti> <Project.build.sourceencoding> UTF-8 </project.build.sourceencoding> </properties> <dependencies> <dependency> <groupid> org.apache.Commons </groupid> <ArTifactId> Commons-Lang3 </ArtifacheD> </Versi 3.7 </Version> </Version> </Version> </Version> </Version> </Version> </Version> </Version> </Version> </Version> </Version> </Version> </Version> </Versi.
Gunakan kelas di paket umum dalam kode
public static void main (string [] args) {string words = "xixi katakan: hello"; if (stringutils.isnotblank (Words)) {System.out.println (Words); }}Terjadi kesalahan setelah pengemasan
java -jar xixi-1.0-snapshot.jar
Pengecualian di Thread "Main" java.lang.noclassdeffounderror: org/apache/commons/lang3/stringutils
di com.paxi.xixi.main (xixi.java:11)
Disebabkan oleh: java.lang.classnotfoundException: org.apache.commons.lang3.stringutils
di java.net.urlclassloader.findclass (urlclassloader.java:381)
di java.lang.classloader.LoadClass (classloader.java:424)
di sun.misc.launcher $ appclassloader.loadClass (peluncur.java:331)
di java.lang.classloader.LoadClass (classloader.java:357)
... 1 lagi
Tambahkan plugin di pom
<build> <lugin> <groupid> org.apache.maven.plugins </sroupId> <ArtifactId> maven-jar-plugin </t Artifactid> <version> 3.1.0 </version> <configuration> <srigive> <drugxix> <draspath> true </addclassspath> <sransclass> <drugclasspath> true </addclassspath> <archive> <drugclass> <draspath> true </addclassspath> <archive> <drugclass.class. <slasspathprefix> lib/</smelaspathphrefix> </ifsigest> </archive> </configuration> </plugin> <lecter> <groupid> org.apache.maven.plugins </sroupid> <ArTifactId> Maven-dependen-plugin </arttifactid> <artifactid> maven-dependen-plugin </arttifactid> <serifact> 3.1.1.1.1.1. <dent> Copy-Dependents </dent> <phase> Paket </phase> <ject> <ject> Copy-Dependents </ject> </ject> <configuration> <OncutDirectory> $ {Project.build.directory}/Libs </OutputDirectory> </configuration> </eksekusi> </eksekusi> </outputDirectory> </configuration> </eksekusi> </eksekusi> </outputDirectory> </configuration> </eksekusi> </Execution>Jalankan lagi
java -jar xixi-1.0-snapshot.jarxixi mengatakan: halo
File manifest.mf adalah
Cat Meta-Inf/Manifest.MFManifest-Versi: 1.0Built-by: Paxiclass-path: lib/commons-lang3-3.7.jarcreated-by: Apache Maven 3.3.3build-jdk: 1.8.0_121main-kelas: com.paxi.xixi
Tidak hanya menggunakan dependensi dalam POM tetapi juga stoples tiga partai. Bagaimana Maven menghasilkan stoples yang dapat dieksekusi?
Proses kompilasi membutuhkan modifikasi plugin kompilasi maven-compiler-plugin . Saat berjalan, Anda perlu menambahkan direktori stoples tiga partai untuk menjalankan perintah.
java -jar -djava.ext.dirs = lib/ target/ xixi -1.0-snapshot.jarxixi mengatakan: hellopapa mengatakan: halo
Proses kompilasi dan resolusi
Kode tesnya
public static void main (string [] args) {string words = "xixi katakan: hello"; if (stringutils.isnotblank (Words)) {System.out.println (Words); } Papa.say (); }Gunakan perintah mvn untuk menjalankan kesalahan
[Kesalahan] Gagal mengeksekusi sasaran org.apache.maven.plugins: maven-compiler-plugin: 3.1: compile (compile default) pada proyek xixi: kegagalan kompilasi
xixi/src/main/java/com/paxi/xixi.java: [15,9] Simbol tidak ditemukan
Tambahkan plugin kompilasi ke pom
<lugin> <GroupId> org.apache.maven.plugins </proupId> <ArTifactId> maven-compiler-plugin </artifactid> <version> 3.1 </version> <configururation> <compilerArgs> <arg> -djava.ext.dirs = liB/</argergs> <arg> <djava.ext.dirs = liB/</arger> <arg> <djava.ext.dirs = liB/</arger> <arg> <djava.ext.dirs = liB/</arger> <arg> <djava.ext.dirs = liB/</arger> <arg> <djava.ext.dirs = liB/</arger>
Eksekusi paket
Java -jar Target/xixi-1.0-snapshot.jarxixi mengatakan: helloexception di utas "utama" java.lang.noclassdeffounderror: com/paxi/papa di com.paxi.xixi.main (xixi.java:15) disebabkan oleh: java. java.net.urlclassloader.findclass (urlclassloader.java:381) di java.lang.classloader.loadclass (classloader.java:424) di sun.misc.launcher $ appclassloader.loadclass (peluncur.java:331) AT) AT $ AT) AT $ java.lang.classloader.LoadClass (classloader.java:357) ... 1 lagi
Tambahkan parameter untuk mendapatkan hasilnya
java -jar -djava.ext.dirs = lib/ target/ xixi -1.0-snapshot.jarxixi mengatakan: hellopapa mengatakan: halo
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.