Java 如何为JPMS实现ModuleReader?

Java 如何为JPMS实现ModuleReader?,java,java-9,java-module,Java,Java 9,Java Module,我试图理解如何实现自定义ModuleFinder。为此,我需要实现自定义ModuleReference,而对于ModuleReference,我需要实现ModuleReader。这是我的代码: ModuleReference ref = new ModuleReference(moduleDescriptor, Paths.get(path).toUri()) { @Override public ModuleReader open() throws IOException { Mod

我试图理解如何实现自定义ModuleFinder。为此,我需要实现自定义ModuleReference,而对于ModuleReference,我需要实现ModuleReader。这是我的代码:

ModuleReference ref = new ModuleReference(moduleDescriptor, Paths.get(path).toUri()) {

@Override
public ModuleReader open() throws IOException {
    ModuleReader moduleReader = new ModuleReader() {
        @Override
        public Optional<URI> find(String name) throws IOException {
            //LINE X
            throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        public Stream<String> list() throws IOException {
            throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        public void close() throws IOException {
            throw new UnsupportedOperationException("Not supported yet.");
        }
    };
    return moduleReader;
}
ModuleReference ref=new ModuleReference(moduleDescriptor,path.get(path.toUri()){
@凌驾
public ModuleReader open()引发IOException{
ModuleReader ModuleReader=新的ModuleReader(){
@凌驾
公共可选查找(字符串名称)引发IOException{
//第X行
抛出新的UnsupportedOperationException(“尚未支持”);
}
@凌驾
公共流列表()引发IOException{
抛出新的UnsupportedOperationException(“尚未支持”);
}
@凌驾
public void close()引发IOException{
抛出新的UnsupportedOperationException(“尚未支持”);
}
};
返回模块阅读器;
}
})


我不明白我应该在X行写什么。据我所知,这个模块不是由JVM加载的,所以我必须给jar中位于文件系统上的资源一个URI吗?类似于
/home/Sam/temp/foo-1.jar!META-INF/temp.txt或什么?

在这个邮件线程中可以找到ModuleReader的一个示例

有点被这个问题弄糊涂了,是不是,既然这是一个覆盖的实现,你就显式地调用了契约?@nullpointer抱歉,我不明白你的问题。你可以看看
ModuleReader
的内部实现来获得灵感;根据Intellij,有9种这样的实现(在Java10中)。例如,@Pavel_K我在问,你为什么要创建自己的
模块阅读器
,你创建自己的模块阅读器的意图是什么?我希望这是您更了解的内容(contracts),因此通常可以编写您自己的抽象类重写实现。@nullpointer我想尝试向JPMS层添加.war文件,但默认ModuleFinder不允许这样做。我在这里打开了一个问题,Alan Bateman建议创建自定义ModuleFinder。