Tag: jigsaw

Java 9 Module系统是否支持可选的依赖项?

背景 在maven中,工件可以声明依赖关系 true 这意味着不需要依赖项,但如果存在则可以使用。 模块系统的状态似乎指定模块只能读取它所需的模块。 问题 Java 9模块系统确实不支持可选的依赖项吗? 为什么不? Java 9模块系统提供了哪些可选依赖项替代方案? 用例 我有一个框架,集成了应用程序可能使用或不使用的各种库。 目前,该框架是一个单独的JAR,它反映了类路径以跳过缺少库的集成代码。 我想我们可以将它分成每个配置的单独模块,但这会导致JAR数量的组合爆炸,因为我们不仅需要为每个可选依赖项单独的JAR,而且对于大多数对都需要单独的JAR可选依赖项…

什么是自动模块?

stackoverflow上多次提到自动模块,但我找不到自动模块的完整,简洁和自给自足的定义。 那么,什么是自动模块? 它是否导出所有包裹? 它打开所有包裹吗? 它是否读取所有其他模块?

Java 9拼图 – 从外部模块访问资源文件

到目前为止,非模块化的java,你只需将文件放在src/main/java/resources确保它在classpath中,然后加载它 file = getClass().getClassLoader().getResourceAsStream(“myfilename”); 来自类路径中的任何位置。 现在有了模块,情节变浓了。 我的项目设置如下: module playground.api { requires java.base; requires java.logging; requires framework.core; } 配置文件放在src/main/resources/config.yml 。 项目运行 java -p target/classes:target/dependency -m framework.core/com.framework.Main 由于主类不在我自己的项目中,而是在外部框架模块中,因此无法看到config.yml 。 现在的问题是,有没有办法以某种方式将我的配置文件放入模块或打开它? 我是否必须更改框架上游加载文件的方式? 我尝试在module-info中使用“exports”或“opens”,但它想要一个包名,而不是文件夹名。 如何以最佳实用的方式实现这一点,以便它可以像Java 8一样工作,并尽可能少地进行更改?

在Java 9中运行时扫描类路径/模块路径

我似乎无法找到关于是否仍然可以在运行时扫描所有可用类(用于接口,注释等)的任何信息,就像Spring,Reflections和许多其他框架和库当前所做的那样,面对Jigsaw相关的更改类的加载方式。 编辑 :这个问题是关于扫描寻找类的真实物理文件路径。 另一个问题是关于动态加载类和资源。 这是相关的,但非常重复 。 更新 :Jetty项目为此制定了标准化API的JEP提议 。 如果你有办法帮助实现这个目标,请做。 否则,等等和希望。 更新2 :找到这个相关的发声post。 引用后代的代码片段: 如果您真的只是想要获取引导层中模块的内容(在启动时解析的模块),那么您将执行以下操作: ModuleLayer.boot().configuration().modules().stream() .map(ResolvedModule::reference) .forEach(mref -> { System.out.println(mref.descriptor().name()); try (ModuleReader reader = mref.open()) { reader.list().forEach(System.out::println); } catch (IOException ioe) { throw new UncheckedIOException(ioe); } });