如何使用maven构建java9service

这篇文章主要介绍了如何使用maven构建java9 service,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

成都网站设计、成都网站制作的开发,更需要了解用户,从用户角度来建设网站,获得较好的用户体验。创新互联公司多年互联网经验,见的多,沟通容易、能帮助客户提出的运营建议。作为成都一家网络公司,打造的就是网站建设产品直销的概念。选择创新互联公司,不只是建站,我们把建站作为产品,不断的更新、完善,让每位来访用户感受到浩方产品的价值服务。

maven

整个工程跟传统maven多module的工程结构一样,java9的一个module对应maven project的一个module。下面是根目录下的pom文件:




  4.0.0

  com.example
  java9-service-demo
  0.0.1-SNAPSHOT

  
    consumer-demo
    service-sort
    service-sort-bubble
    service-sort-merge
  
  pom

  
    UTF-8
    
    9
    9
  

  
    
      
        
          org.apache.maven.plugins
          maven-compiler-plugin
          3.6.1
          
            9
          
        
      
    
  

这里管理了一个maven-compiler-plugin,配置release为9,因为java9支持multi release,可以同时支持多个java版本,这里编译为java9版本。

service-sort

这个是service接口module

module service.sort {
  exports service.sort;
  uses service.sort.SortService;
}

这里同时声明uses SortService表示是它需要在这个module里头使用ServiceLoader去加载service实例

public interface SortService {
  public  List sortList(List list);

  public static SortService getProviderInstanceLazy() {
    Stream> providers = ServiceLoader.load(SortService.class)
        .stream();
    //provider方法等到get的时候才会实例化
    SortService service = providers.map(Provider::get)
        .findAny()
        .orElse(null);
    return service;
  }
}

这里在声明接口的同时,也增加了静态方法,用于加载service实例。

service-sort-bubble

maven



  
    java9-service-demo
    com.example
    0.0.1-SNAPSHOT
  
  4.0.0

  com.example
  service-sort-bubble
  jar

  
    
      com.example
      service-sort
      0.0.1-SNAPSHOT
    
  

这里添加对api包的依赖

module-info.java

module service.sort.bubble {
  requires service.sort;
  provides service.sort.SortService with sort.impl.bubble.BubbleSort;
}

这里声明了BubbleSort提供了SortService的实现

BubbleSort

public class BubbleSort implements SortService {

  public  List sortList(List 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  void swap(Listlist, int inner) {
    T temp = list.get(inner);
    list.set(inner, list.get(inner + 1));
    list.set(inner + 1, temp);
  }
}

service-sort-merge

maven



  
    java9-service-demo
    com.example
    0.0.1-SNAPSHOT
  
  4.0.0

  com.example
  service-sort-merge
  jar

  
    
      com.example
      service-sort
      0.0.1-SNAPSHOT
    
  

module-info.java

module service.sort.merge {
  requires service.sort;
  provides service.sort.SortService with sort.impl.merge.MergeSort;
}

这里声明了MergeSort为SortService接口的实现

MergeSort

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  List sortList(List list) {
    System.out.println("using MergeSort");
    Collections.sort(list);
    return list;
  }
}

consumer

maven



  
    java9-service-demo
    com.example
    0.0.1-SNAPSHOT
  
  4.0.0

  com.example
  consumer-demo
  jar

  
    
      com.example
      service-sort
      0.0.1-SNAPSHOT
    
  

注意这里没有添加实现类的依赖

module-info.java

module consumer {
  requires service.sort;
}

Main

public class Main {

  public static void main(String[] args) {

    System.out.println("sort service consumer started.");
    List data = new ArrayList();
    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 clean install

这里是在根目录下执行

使用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实现都添加

复制代码 代码如下:


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

发现貌似跟添加到path的顺序没有关系,即使把merge的jar包放在前面,也是使用bubble

感谢你能够认真阅读完这篇文章,希望小编分享的“如何使用maven构建java9 service”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习!


标题名称:如何使用maven构建java9service
网站URL:http://csdahua.cn/article/gsigdi.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流