Sequenz
Dieser Artikel untersucht hauptsächlich, wie Sie Java9 -Multi -Modul- und Service -Beispiele in Maven erstellen
Maven
Das gesamte Projekt ist das gleiche wie die traditionelle Maven Multi-Modul-Ingenieurstruktur. Ein Modul in Java9 entspricht einem Modul im Maven -Projekt. Hier ist die POM -Datei im Stammverzeichnis:
<? 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>com.example</groupId> <artifactId>java9-service-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <modules> <module>consumer-demo</module> <module>service-sort</module> <module>service-sort</module> <module>service-sort-bubble</module> <module>service-sort-merge</module> </modules> <Packages> pom </packaging> <properties> <project.build.sourceencoding> utf-8 </project.build.sourceEncoding> <!-lass Intellij Java9 richtig kompilieren, ansonsten wird es immer wieder geändert, um 1.5-> <maven.sourcer.source> 9 </Maven.compiler.sourcer.source> 9 </Maven..-Sources> 9 </Maven..Sources zu verwenden. <maven.compiler.target>9</maven.compiler.target> </properties> <build> <pluginManagement> <plugins> <plugins> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.6.1</version> <configuration> <freisetzungen> 9 </release> </configuration> </plugins> </pluginmanagement> </build> </project>
Hier ist ein Maven-Compiler-Plugin verwaltet, und die Veröffentlichung ist mit 9 konfiguriert. Da Java9 Multi-Release unterstützt, kann er mehrere Java-Versionen gleichzeitig unterstützen. Es wird hier als Java9 -Version zusammengestellt.
Service-Sort
Dies ist das Service -Schnittstellenmodul
Modul service.sort {exports service.sort; verwendet service.sort.sortService;} Hier wird der Nutzungssortenservice erklärt, dass sie mit Serviceloader die Serviceinstanz in diesem Modul laden muss.
public interface sortService {public <t erweitert vergleichbar> Liste <T> sortList (Liste <T> Liste); public static sortService getProviderinStancelazy () {Stream <Provider <sortService >> providers = serviceloader.load (sortService.class) .stream (); // Provider -Methode wird erst so instanziiert, dass GET SortService Service = Providers.map (Anbieter :: Get) .Findany () .orelse (null); Rückgabeservice; }} Bei der Erklärung der Schnittstelle werden auch statische Methoden hinzugefügt, um Serviceinstanzen zu laden.
Service-Sort-Bubble
Maven
<? XSI: Schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactid> java9-Service-demo </artifactid> <gruppen> <artifactid> java9-service-demo </artifactid> <gruppen> </gruppa. <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>service-sort-bubble</artifactId> <packaging>jar</packaging> <dependencies> <dependency> <groupId>com.example</groupId> <artifactId>service-sort</artifactId> <version> 0.0.1-Snapshot </Version> </abhängig> </abhängig> </project>
Fügen Sie hier Abhängigkeiten zum API -Paket hinzu
Modul-info.java
Modul Service.sort.Bubble {fordern service.sort; Stellen Sie sort.impl.bubble.bubblesort;} Hier wird angegeben, dass Bubblesort die Art Sortservice zur Verfügung stellt
Bubblesort
öffentliche Klasse Bubblesort implementiert SortService {public <t erweitert vergleichbar> Liste <T> sortList (Liste <T> Liste) {System.out.println ("Bubblesort verwenden"); für (int outer = 0; äußere <list.size ()-1; äußere ++) {für (int inner = 0; inner <list.size ()-oter-1; inner ++) {if (list.get (inner) .Compareto (list.get (innere+1))> 0) {swap (list (list); }}} Rückgabeliste; } private <T> void Swap (Liste <T> list, int innere) {t temp = list.get (inner); list.set (inner, list.get (innere + 1)); list.set (innere + 1, temp); }}Service-Sort-Merge
Maven
<? XSI: Schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactid> java9-Service-demo </artifactid> <gruppen> <artifactid> java9-service-demo </artifactid> <gruppen> </gruppa. <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>service-sort-merge</artifactId> <packaging>jar</packaging> <dependencies> <dependency> <groupId>com.example</groupId> <artifactId>service-sort</artifactId> <version> 0.0.1-Snapshot </Version> </abhängig> </abhängig> </project>
Modul-info.java
Modul service.sort.merge {fordern service.sort; Stellen Sie sort.impl.merge.MergeNgeSort;} Hier ist die Implementierung von Mergesort als SortService -Schnittstelle
Mergesort
import Java.util.list; import Java.util.ArrayList; import Java.util.Collections; Import Java.util.Arrays; service.sort.sortService; Sammelns.sort (Liste); Rückgabeliste; }}
Verbraucher
Maven
<? XSI: Schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactid> java9-Service-demo </artifactid> <gruppen> <artifactid> java9-service-demo </artifactid> <gruppen> </gruppa. <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>consumer-demo</artifactId> <packaging>jar</packaging> <dependencies> <dependency> <groupId>com.example</groupId> <artifactId>service-sort</artifactId> <version> 0.0.1-Snapshot </Version> </abhängig> </abhängig> </project>
Beachten Sie, dass hier keine Abhängigkeiten für Implementierungsklassen hinzugefügt werden
Modul-info.java
Modul Verbraucher {fordern service.sort;} Hauptsächlich
public class main {public static void main (String [] args) {System.out.println ("Sorting Service Consumer gestartet."); LIST <NEger> data = new ArrayList <Ganzzahl> (); Data.Add (5); Data.Add (3); Data.Add (10); Data.Add (2); Data.Add (8); SortService SortService = SortService.getProviderinStancelazy (); if (SortService! = null) {SortService.SortList (Daten); } System.out.println (Daten); System.out.println ("Finish"); }}Kompilieren und rennen
Zusammenstellung
MVN Clean Installation
Dies wird im Stammverzeichnis ausgeführt
Mit Blase
Die Codekopie lautet wie folgt:
java ---module-path ./consumer-demo/target/consumer-demo-0.1-snapshot.jar:./service-sort/target/service-sort-0.0.1-snapshot.jar:./Service-sort-modartarget/Service-sort/Service/Sservice/Service Verbraucher/Verbraucher.Main
Beachten Sie, dass hier das Glas der Blase zu Modulpfaden hinzugefügt wird
Ausgabe
Sortieren Sie den Service -Verbraucher begonnen.
Verwenden Sie Bubblesort
[2, 3, 5, 8, 10]
beenden
Verwenden Sie zusammen
Die Codekopie lautet wie folgt:
java ---module-path ./consumer-demo/target/consumer-demo-0.1-snapshot.jar:./service-sort/target/service-sort-0.0.1-snapshot.jar:./Service-merge/target/Sservice/Service/Service/Service/Service/Service/Service Verbraucher/Verbraucher.Main
Beachten Sie hier, dass hier zusammengeführt wird
Ausgabe
Sortieren Sie den Service -Verbraucher begonnen.
Verwenden von Mergesort
[2, 3, 5, 8, 10]
beenden
Beide Service -Implementierungen werden hinzugefügt
Die Codekopie lautet wie folgt:
Java-Module-Pfad ./consumer-demo/target/consumer-demo-0.0.1-snapshot.jar:./service-sort/target/service-sort-0.0.1-snapshot.jar:./service-s. ORT-Bubble/Target/Service-Sort-Bubble-0.0.1-Snapshot.jar: ./ service-sort-merge/target/service-sort-merge-0.0.1-snapshot.jar -Modul Consumer/Consumer.main
oder
Die Codekopie lautet wie folgt:
Java-Module-Pfad ./consumer-demo/target/consumer-demo-0.0.1-snapshot.jar:./service-sort/target/service-sort-0.0.1-snapshot.jar:./service-s. ORT-Merge/Target/Service-Sort-Merge-0.0.1-Snapshot.jar: ./ service-sort-bubble/target/service-sort-bubble-0.0.1-snapshot.jar -Modul Consumer/Consumer.main
Ausgabe
Sortieren Sie den Service -Verbraucher begonnen.
Verwenden Sie Bubblesort
[2, 3, 5, 8, 10]
beenden
Es scheint, dass es nichts mit der Reihenfolge zu tun hat, um den Pfad hinzuzufügen. Auch wenn das Merge -Jar -Paket vor es platziert ist, ist es immer noch eine Blase.
Zusammenfassung
In Java6 gab es bereits einen Serviceloader, aber zu diesem Zeitpunkt wurde er auf das Erstellen einer vollständigen Pfadnamendatei für die Serviceschnittstelle im Meta-Inf/Services-Verzeichnis des JAR-Pakets angewiesen und den vollständigen Pfadnamen der Implementierungsklasse geschrieben. Nach der Einführung der Modularisierung unterstützt Java9 auch die Erklärung des Dienstleisters und der Verbraucherinformationen in Modul-info.java. Auf diese Weise kann das Modulsystem Serviceloader ohne die ursprüngliche Meta-Inf-Deklarationsmethode unterstützen.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.