一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 使用maven構(gòu)建java9 service實例詳解

使用maven構(gòu)建java9 service實例詳解

2021-04-07 13:17go4it Java教程

本篇文章主要介紹了使用maven構(gòu)建java9 service實例詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

本文主要研究下如何在maven里頭構(gòu)建java9 multi module及service實例

maven

整個工程跟傳統(tǒng)maven多module的工程結(jié)構(gòu)一樣,java9的一個module對應maven project的一個module。下面是根目錄下的pom文件:

?
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
<?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">
 
  <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-bubble</module>
    <module>service-sort-merge</module>
  </modules>
  <packaging>pom</packaging>
 
  <properties>
    <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>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.6.1</version>
          <configuration>
            <release>9</release>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
 
</project>

這里管理了一個maven-compiler-plugin,配置release為9,因為java9支持multi release,可以同時支持多個java版本,這里編譯為java9版本。

service-sort

這個是service接口module

?
1
2
3
4
module service.sort {
  exports service.sort;
  uses service.sort.SortService;
}

這里同時聲明uses SortService表示是它需要在這個module里頭使用ServiceLoader去加載service實例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public interface SortService {
  public <T extends Comparable> List<T> sortList(List<T> list);
 
  public static SortService getProviderInstanceLazy() {
    Stream<Provider<SortService>> providers = ServiceLoader.load(SortService.class)
        .stream();
    //provider方法等到get的時候才會實例化
    SortService service = providers.map(Provider::get)
        .findAny()
        .orElse(null);
    return service;
  }
}

這里在聲明接口的同時,也增加了靜態(tài)方法,用于加載service實例。

service-sort-bubble

maven

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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">
  <parent>
    <artifactId>java9-service-demo</artifactId>
    <groupId>com.example</groupId>
    <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>
    </dependency>
  </dependencies>
</project>

這里添加對api包的依賴

module-info.java

?
1
2
3
4
module service.sort.bubble {
  requires service.sort;
  provides service.sort.SortService with sort.impl.bubble.BubbleSort;
}

這里聲明了BubbleSort提供了SortService的實現(xiàn)

BubbleSort

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class BubbleSort implements SortService {
 
  public <T extends Comparable> List<T> sortList(List<T> list) {
    System.out.println("use BubbleSort");
    for (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(list, inner);
        }
      }
    }
    return list;
  }
 
  private <T> void swap(List<T>list, int inner) {
    T temp = list.get(inner);
    list.set(inner, list.get(inner + 1));
    list.set(inner + 1, temp);
  }
}

service-sort-merge

maven

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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">
  <parent>
    <artifactId>java9-service-demo</artifactId>
    <groupId>com.example</groupId>
    <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>
    </dependency>
  </dependencies>
</project>

module-info.java

?
1
2
3
4
module service.sort.merge {
  requires service.sort;
  provides service.sort.SortService with sort.impl.merge.MergeSort;
}

這里聲明了MergeSort為SortService接口的實現(xiàn)

MergeSort

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Arrays;
import service.sort.SortService;
 
public class MergeSort implements SortService {
 
  public <T extends Comparable> List<T> sortList(List<T> list) {
    System.out.println("using MergeSort");
    Collections.sort(list);
    return list;
  }
}

consumer

maven

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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">
  <parent>
    <artifactId>java9-service-demo</artifactId>
    <groupId>com.example</groupId>
    <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>
    </dependency>
  </dependencies>
</project>

注意這里沒有添加實現(xiàn)類的依賴

module-info.java

?
1
2
3
module consumer {
  requires service.sort;
}

Main

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Main {
 
  public static void main(String[] args) {
 
    System.out.println("sort service consumer started.");
    List<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");
  }
}

編譯及運行

編譯

?
1
mvn clean install

這里是在根目錄下執(zhí)行

使用bubble

 

復制代碼 代碼如下:

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/service-sort-bubble-0.0.1-SNAPSHOT.jar --module consumer/consumer.Main

 

 

注意這里添加了bubble的jar到module-path

輸出

sort service consumer started.
use BubbleSort
[2, 3, 5, 8, 10]
finish

使用merge

 

復制代碼 代碼如下:

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/target/service-sort-merge-0.0.1-SNAPSHOT.jar --module consumer/consumer.Main

 

 

注意這里添加了merge的jar到module-path

輸出

sort service consumer started.
using MergeSort
[2, 3, 5, 8, 10]
finish

兩個service實現(xiàn)都添加

 

復制代碼 代碼如下:

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/service-sort-bubble-0.0.1-SNAPSHOT.jar:./service-sort-merge/target/service-sort-merge-0.0.1-SNAPSHOT.jar --module consumer/consumer.Main

 

 

或者

 

復制代碼 代碼如下:

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/target/service-sort-merge-0.0.1-SNAPSHOT.jar:./service-sort-bubble/target/service-sort-bubble-0.0.1-SNAPSHOT.jar --module consumer/consumer.Main

 

輸出

sort service consumer started.
use BubbleSort
[2, 3, 5, 8, 10]
finish

發(fā)現(xiàn)貌似跟添加到path的順序沒有關(guān)系,即使把merge的jar包放在前面,也是使用bubble

小結(jié)

在java6的時候就已經(jīng)有ServiceLoader了,不過那個時候是依賴在jar包的META-INF/services目錄下創(chuàng)建一個service接口全路徑名稱的文件,里頭寫上實現(xiàn)類的全路徑名稱。java9對在引入模塊化后也支持在module-info.java里頭聲明service的提供方和消費者信息,這樣模塊系統(tǒng)可以支持ServiceLoader,不需要使用原來的META-INF那種聲明方式。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://juejin.im/post/5a9269c85188257a84625450

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 韩国成人毛片aaa黄 含羞草国产亚洲精品岁国产精品 | 日本在线国产 | 亚洲精品91在线 | 国产拍拍视频一二三四区 | 国产成人h综合亚洲欧美在线 | 色综合久久天天综合观看 | 国产资源免费 | 西施打开双腿下面好紧 | 人人人人看人人人做人人 | 午夜一个人在线观看完整版 | 日韩精品一区二区三区视频 | 密臀tv| 午夜特级毛片 | 妹妹你插的我好爽 | 国产综合视频 | 99久久无色码中文字幕 | 白丝校花被扒开双腿喷水小说 | 日韩成人在线影院 | 人人爽人人射 | 爱爱小说漫画 | 国产成人综合精品 | 国产欧美日韩精品在线 | 精品欧美一区二区三区四区 | 操碰91| 99久久国产综合精品1尤物 | 男男同gayxxx | 亚洲男女天堂 | 欧美摘花破处 | 扒开双腿猛进入爽爽视频ai | 国内剧情麻豆 | 四虎视屏 | 亚洲国产欧美在线人成aaaa20 | 国产精品怡红院在线观看 | 国模娜娜一区二区三区 | 欧美18-19sex性处视频 | 亚洲国产日韩欧美一区二区三区 | 色久天| 放荡护士玩3p口述 | 国产精品视频久久久久 | 久草在线草a免费线看 | 狠狠干奇米 |