Java JPMS:如何让IntelliJ IDEA自动发现和编译服务模块的提供者模块?
我用IntelliJ IDEA开发了这个。这个项目是Java9服务模块的一个演示。我在Java9的“引入服务”一章中学习了模块化编程这本书 源代码Java JPMS:如何让IntelliJ IDEA自动发现和编译服务模块的提供者模块?,java,intellij-idea,service,java-9,java-module,Java,Intellij Idea,Service,Java 9,Java Module,我用IntelliJ IDEA开发了这个。这个项目是Java9服务模块的一个演示。我在Java9的“引入服务”一章中学习了模块化编程这本书 源代码 服务模块 模块名称:packt.sortutil public interface SortUtil { <T extends Comparable> List<T> sortList(List<T> list); } 类全名:packt.util.SortUtil public interface S
packt.sortutil
public interface SortUtil {
<T extends Comparable> List<T> sortList(List<T> list);
}
类全名:packt.util.SortUtil
public interface SortUtil {
<T extends Comparable> List<T> sortList(List<T> list);
}
module-info.java:
module packt.sort.bubblesort {
requires packt.sortutil;
provides packt.util.SortUtil with packt.util.impl.bubblesort.BubbleSortUtilImpl;
}
module packt.addressbook {
requires packt.sortutil;
uses packt.util.SortUtil;
}
提供者模块2packt.sort.javasort
是相同的,只是不同的实现不同
module packt.sort.bubblesort {
requires packt.sortutil;
provides packt.util.SortUtil with packt.util.impl.bubblesort.BubbleSortUtilImpl;
}
module packt.addressbook {
requires packt.sortutil;
uses packt.util.SortUtil;
}
类别:
package packt.util.impl.bubblesort;
public class BubbleSortUtilImpl implements SortUtil
...
Iterable<SortUtil> sortUtils = ServiceLoader.load(SortUtil.class);
for (SortUtil sortUtil : sortUtils){
System.out.println("Found an instance of SortUtil");
sortUtil.sortList(contacts);
}
然后我手动设置IntelliJ IDEA中的使用者模块(packt.addressbook
)依赖于提供者模块(packt.sort.bubblesort
和packt.sort.javasort
,以蓝色突出显示)(仅在IDE中,就JPMS而言,使用者模块不依赖于提供者模块)。它现在可以正常工作了,尽管我不确定它是否是最好的解决方案
另一方面,要显式添加这些模块,可以使用VM arg
--添加模块provider1、provider2
以上主要是为了确保从可观察模块集(显示在模块路径中)解析提供程序。另一方面,对于实际实现位的进一步参考,要显式添加这些模块,可以使用VM arg--add modules provider 1,provider 2
,以上主要是为了确保从可观察模块集(存在于modulepath中)解析提供程序。有关实际实现位的进一步参考