استخدم "maven-shade-plugin" لإنشاء برطمان واحد قابل للتنفيذ مع جميع التبعيات المطلوبة فيه لبرنامج Java أو Spring Project؟
نشرت: 2016-11-16ما عليك سوى إنشاء ملف
Crunchify.jar
واحد بكل التبعيات بداخله
لقد كتبت الأسبوع الماضي درسًا تعليميًا حول كيفية استخدام maven-resources-plugin
و maven-dependency-plugin
& maven-jar-plugin
لإنشاء مشروع Jar الكامل القابل للتنفيذ؟ نتيجة لذلك ، يقوم بإنشاء / نسخ جميع الملفات المطلوبة إلى مجلد /target/Crunchify
.
Before:
استخدام المكونات الإضافية maven-Resource و maven-Depency و maven-jar:
After:
استخدام البرنامج المساعد maven-shade:
لنبدأ في كيفية تحقيق النتيجة أعلاه:
هنا كما ترى ، قمنا بتجميع كل شيء من Java Project في just one file
وقمنا بإعطاء الاسم Crunchify.jar
(مع جميع الملفات بداخله).
قبل أيام قليلة ، لم يكن لدي أي فكرة عن كيفية تحقيق ذلك لأنني أردت إنشاء runnable binary distribution of a standalone Java application
باستخدام Maven. بعبارات أخرى:
- كيفية إنشاء جرة الربيع القابلة للتنفيذ مع المخضرم؟
- إنشاء توزيع ثنائي قابل للتشغيل باستخدام Maven لـ Java + Spring + التبعيات الأخرى
- كيف تبني مشاريع Java + Spring مع Maven؟
عادة في مافن ، نعتمد على إدارة التبعية. تحتوي القطعة الأثرية فقط على الفئات / الموارد الخاصة بها. سيكون Maven مسؤولاً عن اكتشاف جميع القطع الأثرية (JARs وغيرها) التي يعتمد عليها المشروع ، عند التجميع والتشغيل وما إلى ذلك.
بمساعدة maven -shade- plugin
تمكنت من تحقيق ذلك . إنه يوفر القدرة على حزم الأداة في uber-jar (One major file jar)
، بما في ذلك تبعياتها وتظليل - أي إعادة تسمية - حزم بعض التبعيات.
في مشروعي ، لدي العديد من التبعيات الأخرى ، مثل Spring Framework ، و JSON ، وأدوات الطرف الثالث ، وما إلى ذلك. يوجد أدناه مجرد نموذج لمشروع ولكن ملف .jar للإنتاج الخاص بي وصل ~5.2MB big
إلى 5.2 ميجا بايت تقريبًا.
إن
uber-jar
هو شيء يأخذ كل التبعيات ، ويستخرج محتوى التبعيات ويضعه في JAR واحد ، مع فئات / موارد المشروع نفسه. من خلال الحصول على مثل uber-jar ، منeasy for execution
، لأنك ستحتاج فقط إلى JAR كبير واحد بدلاً من أطنان من JARs الصغيرة لتشغيل تطبيقك. كما أنه يسهل التوزيع في بعض الحالات.
لتحقيق ذلك ، تحتاج إلى تحديث ملف pom.xml الخاص بك.
الخطوة 1
ألق نظرة على ملف pom.xml
الكامل. سوف تكون مهتمًا بشكل أساسي بعلامة <build>
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
< project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns : xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi : schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > < modelVersion > 4.0.0 < / modelVersion > < groupId > CrunchifyMavenBuildPlugins < / groupId > < artifactId > CrunchifyMavenBuildPlugins < / artifactId > < version > 0.0.1 - SNAPSHOT < / version > < name > CrunchifyMavenBuildPlugins < / name > < properties > < project . build . sourceEncoding > UTF - 8 < / project . build . sourceEncoding > < / properties > < dependencies > < dependency > < groupId > log4j < / groupId > < artifactId > log4j < / artifactId > < version > 1.2.17 < / version > < / dependency > < dependency > < groupId > com . googlecode . json - simple < / groupId > < artifactId > json - simple < / artifactId > < version > 1.1 < / version > < / dependency > < dependency > < groupId > axis < / groupId > < artifactId > axis < / artifactId > < version > 1.4 < / version > < / dependency > < dependency > < groupId > commons - beanutils < / groupId > < artifactId > commons - beanutils < / artifactId > < version > 1.8.3 < / version > < / dependency > < dependency > < groupId > commons - collections < / groupId > < artifactId > commons - collections < / artifactId > < version > 3.2.1 < / version > < / dependency > < dependency > < groupId > commons - configuration < / groupId > < artifactId > commons - configuration < / artifactId > < version > 1.10 < / version > < / dependency > < dependency > < groupId > commons - io < / groupId > < artifactId > commons - io < / artifactId > < version > 2.4 < / version > < / dependency > < dependency > < groupId > javax . mail < / groupId > < artifactId > mail < / artifactId > < version > 1.4.7 < / version > < / dependency > < dependency > < groupId > javax . servlet < / groupId > < artifactId > servlet - api < / artifactId > < version > 2.5 < / version > < / dependency > < dependency > < groupId > org . json < / groupId > < artifactId > json < / artifactId > < version > 20140107 < / version > < / dependency > < dependency > < groupId > axis < / groupId > < artifactId > axis - saaj < / artifactId > < version > 1.4 < / version > < / dependency > < dependency > < groupId > wsdl4j < / groupId > < artifactId > wsdl4j < / artifactId > < version > 1.6.3 < / version > < / dependency > < dependency > < groupId > com . google . zxing < / groupId > < artifactId > core < / artifactId > < version > 2.0 < / version > < / dependency > < / dependencies > < build > < pluginManagement > < plugins > < plugin > < groupId > org . apache . maven . plugins < / groupId > < artifactId > maven - compiler - plugin < / artifactId > < version > 2.3.1 < / version > < configuration > < source > 1.7 < / source > < target > 1.7 < / target > < / configuration > < / plugin > < / plugins > < / pluginManagement > < plugins > < plugin > < groupId > org . apache . maven . plugins < / groupId > < artifactId > maven - shade - plugin < / artifactId > < version > 1.7 < / version > < executions > < execution > < phase > package < / phase > < goals > < goal > shade < / goal > < / goals > < configuration > < ! -- Optional Start -- > < finalName > Crunchify < / finalName > < shadedArtifactAttached > true < / shadedArtifactAttached > < shadedClassifierName > jar - with - dependencies < / shadedClassifierName > < ! -- Optional End -- > < transformers > < transformer implementation = "org.apache.maven.plugins.shade.resource.ManifestResourceTransformer" > < mainClass > com . crunchify . tutorial . CrunchifyMain < / mainClass > < / transformer > < transformer implementation = "org.apache.maven.plugins.shade.resource.AppendingTransformer" > < resource > META - INF / spring . handlers < / resource > < / transformer > < transformer implementation = "org.apache.maven.plugins.shade.resource.AppendingTransformer" > < resource > META - INF / spring . schemas < / resource > < / transformer > < transformer implementation = "org.apache.maven.plugins.shade.resource.AppendingTransformer" > < resource > META - INF / spring . tooling < / resource > < / transformer > < / transformers > < / configuration > < / execution > < / executions > < / plugin > < / plugins > < / build > < / project > |
كما ترون هنا أنا أستخدم Resource Transformers
في ملف pom.xml. يعد تجميع classes/resources
من العديد من القطع الأثرية في Crunchify JAR
مباشرًا للأمام طالما لا يوجد تداخل. خلاف ذلك ، هناك حاجة إلى نوع من المنطق لدمج الموارد من عدة JARs. هذا هو المكان الذي تبدأ فيه محولات الموارد.

الخطوة 2
بمجرد إضافة maven-shade-plugin
إلى ملف pom.xml
، ما عليك سوى استخدام الأمر أدناه لبناء مشروعك.
1 |
mvn clean install |
ويجب أن ترى Crunchify.jar
واحد (uber-jar) تم إنشاؤه all dependencies mentioned in pom.xml file
بداخله.
الخطوه 3
انتقل إلى المجلد الهدف لمشروعك وسترى ملف Crunchify.jar تم إنشاؤه. فقط استخدم الأمر
$bash> java -jar Crunchify.jar
لتنفيذ مشروعك.
هل لديك ما تضيفه؟ أضفه إلى قسم التعليق أدناه. استمتع ، أتمنى لك يومًا رائعًا وأنت ترميز سعيد.