تسلسل
يدرس هذه المقالة بشكل أساسي كيفية بناء أمثلة وخدمة Multi Multi Java9 في Maven
مافن
المشروع بأكمله هو نفس الهيكل الهندسي متعدد الوحدات في Maven التقليدية. تتوافق وحدة في Java9 مع وحدة في مشروع Maven. هنا ملف POM في دليل الجذر:
<؟ XSI: schemalocation = "http://maven.apache.org/pom/4.0.0 <soph> 0.0.1-snapshot </version> <condules> <module> المستهلك-demo </sybule> <module> service-sort </module> <condule> service-sort </module> <module> service-sort-sort </solan <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <!-دع Intellij تجميع Java9 بشكل صحيح ، وإلا فإنه سيتم تغييره دائمًا لاستخدام 1.5-> <maven.compiler.source> 9 </maven.compiler.source> <maven.compiler.target> 9 </maven.compiler.target> </sprenties> <build> <complinManagement> <ucplitins> <clupins> <roupiD> org.apache.maven.plugins </rougiD> <StifactId> maven-compiler-plugin </etrofactid <soxpant> <relect> 9 </selection> </configuration> </sugionins> </pluginmanagement> </build> </project>
فيما يلي إدارة Maven-compiler-plugin ، ويتم تكوين الإصدار ليكون 9. نظرًا لأن Java9 يدعم الإصدار متعدد ، يمكنه دعم إصدارات Java المتعددة في نفس الوقت. تم تجميعها كنسخة Java9 هنا.
خدمة الخدمة
هذه هي وحدة واجهة الخدمة
Module Service.sort {exports service.sort ؛ يستخدم service.sort.sortservice ؛} هنا ، يتم إعلان خدمة الاستخدام بأنها تحتاج إلى استخدام ServiceLoader لتحميل مثيل الخدمة في هذه الوحدة.
الواجهة العامة sortservice {public <t يمتد قابلة للمقارنة> القائمة <T> sortlist (قائمة <T> قائمة) ؛ STATIC SORESSERVICE GETPROVIDERINSTANCELAZY () {Stream <Provider <SortService >> مقدمي الخدمات = serviceloader.load (sortservice.class) .stream () ؛ // لن يتم إنشاء إنشاء طريقة للمزود حتى الحصول على خدمة sortsservice = مقدمي الخدمات. خدمة الإرجاع ؛ }} أثناء إعلان الواجهة ، تتم إضافة الطرق الثابتة أيضًا إلى مثيلات خدمة التحميل.
الخدمة الخسارة
مافن
<؟ XSI: schemalocation = "http://maven.apache.org/pom/4.0.0 <soph> 0.0.1-snapshot </version> </paret> <dormversion> 4.0.0 </modelversion> <roupiD> com.example </groupId> <ChintifactId> service-sort-sort-bubble </supactid> <caping> artifact </packaging> <soph> 0.0.1-snapshot </version> </sependency> </perendencies> </soploy>
أضف تبعيات على حزمة API هنا
الوحدة النمطية-info.java
module service.sort.bubble {required.sort ؛ توفير service.sort.sortservice مع sort.impl.bubble.bubblesort ؛} يذكر هنا أن Bubblesort يوفر تنفيذ خدمات النوع
Bubblesort
Public Class Bubblesort Precements Sortservice {public <t يمتد قابلة للمقارنة> القائمة <T> sortlist (قائمة <T> قائمة) {system.out.println ("Use bubblesort") ؛ لـ (int outer = 0 ؛ Outer <list.size ()-1 ؛ Outer ++) {for (int inner = 0 ؛ inner <list.size ()-Outer-1 ؛ inner ++) {if (list.get (inner) .compareto (list.get (inner+1))> 0) {swap ، inner) ؛ }}} قائمة الإرجاع ؛ } private <t> void swap (قائمة <T> قائمة ، int inner) {t temp = list.get (inner) ؛ list.set (inner ، list.get (inner + 1)) ؛ list.set (inner + 1 ، temp) ؛ }}خدمة الخسارة
مافن
<؟ XSI: schemalocation = "http://maven.apache.org/pom/4.0.0 <soph> 0.0.1-snapshot </version> </parent> <dormversion> 4.0.0 </modelversion> <roupiD> com.example </groupId> <ChintifactId> service-sort-sort-merge </tefactid> <cloataging> arefactiD </packaging> <soph> 0.0.1-snapshot </version> </sependency> </perendencies> </soploy>
الوحدة النمطية-info.java
module service.sort.merge {required.sort ؛ توفير service.sort.sortservice مع sort.impl.merge.mergesort ؛} فيما يلي تنفيذ Mergesort كواجهة خدمة sorts
دمج
استيراد java.util.list ؛ استيراد java.util.arraylist ؛ استيراد java.util.collections ؛ استيراد java.util.arrays ؛ استيراد خدمة. collections.sort (قائمة) ؛ قائمة العودة }}
مستهلك
مافن
<؟ XSI: schemalocation = "http://maven.apache.org/pom/4.0.0 <soph> 0.0.1-snapshot </version> </paret> <dormversion> 4.0.0 </modelversion> <roupiD> com.example </groupId> <StifactId> المستهلك-demo </sunfactid> <cplaging> jar </packaging> <soph> 0.0.1-snapshot </version> </sependency> </perendencies> </soploy>
لاحظ أنه لا توجد تبعيات لفئات التنفيذ المضافة هنا
الوحدة النمطية-info.java
MODULE Consumer {require Service.sort ؛} رئيسي
الفئة العامة الرئيسية {public static void main (string [] args) {system.out.println ("Sort Service Consumer chisper.") ؛ قائمة <integer> data = new ArrayList <integer> () ؛ data.add (5) ؛ data.add (3) ؛ data.add (10) ؛ data.add (2) ؛ data.add (8) ؛ sortservice sortservice = sortservice.getProviderInstancelazy () ؛ if (sortservice! = null) {sortservice.sortList (data) ؛ } system.out.println (data) ؛ System.out.println ("Finish") ؛ }}تجميع وتشغيل
التجميع
MVN تثبيت نظيف
يتم تنفيذ هذا في دليل الجذر
باستخدام الفقاعة
نسخة الكود كما يلي:
java--module-path ./consumer-demo/target/consumer-demo-0.0.1-snapshot.jar المستهلك/المستهلك
لاحظ أنه تتم إضافة جرة الفقاعة إلى وحدة المسار هنا
الإخراج
فرز مستهلك الخدمة بدأ.
استخدم Bubblesort
[2 ، 3 ، 5 ، 8 ، 10]
ينهي
استخدم الدمج
نسخة الكود كما يلي:
java--module-path ./consumer-demo/target/consumer-demo-0.0.1-snapshot.jar المستهلك/المستهلك
لاحظ أنه يتم إضافة جرة دمج إلى وحدة المسار هنا
الإخراج
فرز مستهلك الخدمة بدأ.
باستخدام Mergesort
[2 ، 3 ، 5 ، 8 ، 10]
ينهي
تتم إضافة كلا تطبيقات الخدمة
نسخة الكود كما يلي:
Java-module-path ./consumer-demo/target/consumer-demo-0.0.1-snapshot.jar:./service-sort/target/service-sort-0.0.1-snapshot.jar:./service-- ort-bubble/target/service-sort-bubble-0.0.1-snapshot.jar: ./ service-sort-merge/target/service-sort-merge-0.0.1-snapshot.jar -موحد المستهلك/المستهلك
أو
نسخة الكود كما يلي:
Java-module-path ./consumer-demo/target/consumer-demo-0.0.1-snapshot.jar:./service-sort/target/service-sort-0.0.1-snapshot.jar:./service-- ort-merge/target/service-sort-merge-0.0.1-snapshot.jar: -موحد المستهلك/المستهلك
الإخراج
فرز مستهلك الخدمة بدأ.
استخدم Bubblesort
[2 ، 3 ، 5 ، 8 ، 10]
ينهي
يبدو أنه لا علاقة له بترتيب الإضافة إلى المسار. حتى لو تم وضع حزمة دمج جرة أمامها ، فهي لا تزال فقاعة.
ملخص
في Java6 ، كان هناك بالفعل جندي ، ولكن في ذلك الوقت ، تم الاعتماد عليه على إنشاء ملف اسم المسار الكامل لواجهة الخدمة في دليل Meta-Inf/Services لحزمة JAR ، وكتب اسم المسار الكامل لفئة التنفيذ. بعد إدخال modularization ، يدعم Java9 أيضًا إعلان موفر الخدمة ومعلومات المستهلك في الوحدة النمطية info.java. وبهذه الطريقة ، يمكن لنظام الوحدة النمطية دعم ServiceLoader دون استخدام طريقة إعلان Meta-Inf الأصلية.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.