순서
이 기사는 주로 Maven에서 Java9 멀티 모듈 및 서비스 예제를 구축하는 방법을 연구합니다.
Maven
전체 프로젝트는 전통적인 Maven 멀티 모듈 엔지니어링 구조와 동일합니다. Java9의 모듈은 Maven 프로젝트의 모듈에 해당합니다. 루트 디렉토리의 POM 파일은 다음과 같습니다.
<? xml version = "1.0"encoding = "utf-8"?> <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"> <modeversion> 4.0.0 </modelversion> <groupid> com.example </groupid> <artifactid> <버전> 0.0.1-snapShot </version> <modules> <module> consumer-demo </module> <module> service-sort </module> <module> service-sort> <module> 서비스-스포트-버블 </module> <module> service-sort-merge </module> <packaging> pacom </moduge> </moduge> <properiate> <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> </properties> <build> <pluginManagement> <plugins> <plugins> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.6.1</version> <configuration> <Release> 9 </release> </configuration> </plugins> </pluginmanagement> </build> </project>
다음은 Maven-Compiler-Plugin을 관리하고 릴리스는 9로 구성됩니다. Java9는 멀티 릴리스를 지원하기 때문에 여러 Java 버전을 동시에 지원할 수 있습니다. 여기에서 Java9 버전으로 컴파일됩니다.
서비스 소트
서비스 인터페이스 모듈입니다
Module Service.SORT {Exports Service.Sort; service.sort.sortservice를 사용합니다.} 여기서 Sortservice 사용은이 모듈에서 서비스 인스턴스를로드하기 위해 Serviceloader를 사용해야한다고 선언됩니다.
public interface sortservice {public <t extends <t> sortlist (list <t> list); public static sortservice getProviderInstanclazy () {stream <provider <sortservice >> 제공자 = serviceloader.load (Sortservice.class) .stream (); // 제공자 메소드는 SortService Service를 얻을 때까지 인스턴스화되지 않습니다. 반품 서비스; }} 인터페이스를 선언하는 동안 정적 메소드도로드 서비스 인스턴스에 추가됩니다.
서비스 소트 버블
Maven
<? xml version = "1.0"encoding = "utf-8"?> <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.xsd"> <aper> <artifactid> java9-service-demo </artifactid> <groupId> Comporampe </groupid> <버전> 0.0.1-snapShot </version> </parent> <modelversion> 4.0.0 </modelversion> <groupid> com.example </groupid> <artifactid> service-sort-bubble </artifactid> <packaging> jar </packaging> <peencients> <ponceplency> com.examplip </groupid> <버전> 0.0.1-snapShot </version> </fectionency> </fectencies> </project>
API 패키지에 종속성을 추가하십시오
Module-Info.java
module service.sort.bubble {reving service.sort; sort.impl.bubble.bubblesort;}로 service.sort.sortservice 제공 여기에서 Bubblesort는 Sortservice의 구현을 제공한다고 언급되어 있습니다.
Bubblesort
Public Class Bubblesort 구현 SortService {public <t는 비슷한> list <t> sortlist (list <t> list) {system.out.println ( "aing bubblesort"); for (int OUTER = 0; OUTER <list.size () -1; OUTER ++) {for (int inner = 0; inner <list.size ()-outer-1; if (list.get (inner) .compareto (list.get (inner+1))> 0) {swap (list, inner); }}} 리턴 목록; } private <t> void swap (list <t> list, int inner) {t temp = list.get (내부); list.set (내부, list.get (내부 + 1)); list.set (내부 + 1, 임시); }}서비스-소트-머지
Maven
<? xml version = "1.0"encoding = "utf-8"?> <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.xsd"> <aper> <artifactid> java9-service-demo </artifactid> <groupId> Comporampe </groupid> <버전> 0.0.1-snapShot </version> </parent> <modelversion> 4.0.0 </modelversion> <groupid> com.example </groupid> <artifactid> service-sort-merge </artifactid> <packaging> jar </packaging> <peenceents> <pecientency> com.examplip </groupId> <버전> 0.0.1-snapShot </version> </fectionency> </fectencies> </project>
Module-Info.java
module service.sort.merge {Quession Service.Sort; sort.impl.merge.mergesort;}로 service.sort.sortservice를 제공하십시오. 다음은 Sortservice 인터페이스로 Mergesort의 구현입니다.
MERGESORT
import java.util.list; import java.util.arraylist; import java.util.collections; import java.util.arrays; import service.sort.sortservice; public <t extends intress <t> sortlist (list <t> list) {system.out.out.out.out.out.out.out.out.out. collections.sort (목록); 반환 목록; }}소비자
Maven
<? xml version = "1.0"encoding = "utf-8"?> <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.xsd"> <aper> <artifactid> java9-service-demo </artifactid> <groupId> Comporampe </groupid> <버전> 0.0.1-snapShot </version> </parent> <modelversion> 4.0.0 </modelversion> <groupid> com.example </groupid> <artifactid> consumer-demo </artifactid> <packaging> jar </packaging> <pecients> <groupId> com.example> <artifactid> service> service service> service> service> <버전> 0.0.1-snapShot </version> </fectionency> </fectencies> </project>
여기에 추가 된 구현 클래스에 대한 종속성이 없습니다.
Module-Info.java
모듈 소비자 {Quession Service.Sort;} 기본
Public Class Main {public static void main (String [] args) {System.out.println ( "정렬 서비스 소비자 시작"); 목록 <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 (데이터); System.out.println ( "Finish"); }}컴파일하고 실행하십시오
편집
MVN 청소 설치
루트 디렉토리에서 실행됩니다
거품 사용
코드 사본은 다음과 같습니다.
java ---module-path ./consumer-demo/target/consumer-demo-0.0.1-snapshot.jar:./service-sort/target/service-sort-0.0.1-snapshot.jar:./service-sort-bubble/target-bubble.0.0.1-shot 소비자/소비자
버블에서 모듈-경로의 항아리가 여기에 추가됩니다.
산출
정렬 서비스 소비자가 시작되었습니다.
Bubblesort를 사용하십시오
[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-sort-merge/targe-sort-merge-0.0.1-shot 소비자/소비자
Merge Jar에 Module-Path가 추가됩니다
산출
정렬 서비스 소비자가 시작되었습니다.
Mergesort 사용
[2, 3, 5, 8, 10]
마치다
두 서비스 구현이 추가됩니다
코드 사본은 다음과 같습니다.
자바-모듈-포스 ./consumer-demo/target/consumer-demo-demo--0.1-snapshot.jar:./service-sort/target/service-sort-0.0.1-snapshot.jar:./service-s Ort-Bubble/Target/Service-Sort-Bubble-0.1-SnapShot.jar : ./ Service-Sort-Merge/Target/Service-Sort-Merge-0.0.1-snapshot.jar -모듈 소비자/소비자
또는
코드 사본은 다음과 같습니다.
자바-모듈-포스 ./consumer-demo/target/consumer-demo-demo--0.1-snapshot.jar:./service-sort/target/service-sort-0.0.1-snapshot.jar:./service-s Ort-Merge/Target/Service-Sort-Merge-0.1-SnapShot.jar : ./ Service-Sort-Bubble/Target/Service-Sort-Bubble-0.0.1-snapshot.jar -모듈 소비자/소비자
산출
정렬 서비스 소비자가 시작되었습니다.
Bubblesort를 사용하십시오
[2, 3, 5, 8, 10]
마치다
그것은 경로에 추가하는 순서와 관련이없는 것 같습니다. Merge Jar 패키지가 그 앞에 배치 되더라도 여전히 거품입니다.
요약
Java6에는 이미 Serviceloader가 있었지만 당시 JAR 패키지의 Meta-Inf/Services 디렉토리에서 서비스 인터페이스의 전체 경로 이름 파일을 작성하는 데 의존하고 구현 클래스의 전체 경로 이름을 썼습니다. 모듈화가 도입 된 후 Java9는 Module-Info.java에서 서비스 제공 업체 및 소비자 정보의 선언을 지원합니다. 이러한 방식으로 모듈 시스템은 원래 Meta-Inf 선언 방법을 사용하지 않고 Serviceloader를 지원할 수 있습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.