问题标签 [java-platform-module-system]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
611 浏览

java - Java 9 反射等效于 --add-modules 是什么?

我需要一种方法来告诉一个新创建的类加载器(没有设置父类)我想要暴露给它的模块(例如java.scripting)。

--add-modules在命令行上传递的反射等价物是什么?

0 投票
1 回答
297 浏览

java - 新的 Java 9 平台模块系统如何集成到 Maven 中?

我最近查看了新的Java 平台模块系统,它提供的功能似乎与 Maven 在 jar 文件之间的依赖关系管理方面提供的功能重叠。我想知道这个新的 Java 特性将如何影响 Maven,以及它是否已经集成到 Maven 或类似工具中,如果是这样,那将是一个 hello-world 使用示例。

干杯

0 投票
2 回答
1069 浏览

java - JDK9 中的预定义模块是什么,或者我需要哪个模块来修复依赖问题?

JDK9(可能)会引入一个模块系统。作为其中的一部分,Java 类库将被模块化。

当类未找到时,这可能会导致异常,因为它们位于尚未指定为依赖项的模块中。

使用模块系统将创建哪些模块,它们各自的内容是什么?

或者换一种说法:给定一个未加载的类,我如何找到合适的模块作为依赖项包含在内?

0 投票
2 回答
16956 浏览

java - 为什么 Java 9 引入了 JMOD 文件格式?

Java 9 提供三种方式将编译后的代码打包到文件中:

  • JMOD
  • 图像

JIMAGE 针对速度和空间进行了优化,并由 JVM 在运行时使用,因此引入 JIMAGE 是有道理的。JIMAGE 文件不应该发布到 maven repos 或在编译或链接时使用。

文档声称 JMOD 可以存储本机代码和 JAR 文件无法存储的其他内容,并且开发人员可以制作和分发自己的 JMOD 文件。JDK 附带的jmods/目录包含 JDK 的所有模块供用户依赖。

问题:

  • 为什么 Java 9 引入了 JMOD 文件格式?
  • 库作者应该分发 JMOD 文件还是 JAR 文件或两者兼而有之?
  • jmod 文件是否应该发布到 maven 存储库?
0 投票
2 回答
9835 浏览

java - Java 9:将包导出到未命名的模块失败

我正在尝试针对 Java 9 构建一个开源项目。我需要使用反射访问一些文件,但我不能,因为它们的模块没有导出包。我使用 arguments 将包导出到未命名的模块--add-exports

我已将以下参数添加到环境变量_JAVA_OPTIONS

我正在使用最新的 JDK 9 构建(截至今天):

这是我尝试构建项目时的输出:

编译仍然失败,这让我想知道我做错了什么。

0 投票
0 回答
48 浏览

java - Java 9 导出周期

在 Java 9 中,模块之间不允许循环,因此 A 需要 B,但 B 不能需要 A。

但是,通过查看 JDK 代码库,我可以看到该java.management模块包含 exports com.sun.jmx.remote.util to java.management.rmi;,并且在java.management.rmi模块中我看到了导出com.sun.jmx.remote.protocol.rmi to java.management;

为什么对导出语句放宽这个循环规则?

0 投票
2 回答
1314 浏览

java - Java 9 上的 Java 代理

在 java 9 之前,监控JavaAgent被加载到 JVM 中,boostrapClassloader以便被监控的应用程序可以访问它们

使用 Java 9 模块化架构,只能java.base module在 Bootstrap 类加载器中加载,所以 Java 代理只能访问 java.base 中的类?默认情况下它不能访问 java.base 之外的任何东西?

javaAgent为了访问 java.sql 等其他模块,需要在内部进行什么更改?

0 投票
4 回答
3982 浏览

java - 使用 jigsaw 模块使用 jdk9 运行 spring boot

这个应用程序有什么问题。我认为类路径 jar 和模块 jar 的混合是有效的。对于所有没有明确模块信息的罐子成为自动模块?当我删除我的 module-info.java 时,它可以工作。因为IDEA在这种情况下使用了类路径。

Java(TM) SE 运行时环境 (build 9+176)

IntelliJ IDEA 2017.1.4

模块信息.java

应用程序.java

pom.xml

线程“主”java.lang.IllegalArgumentException 中的异常:无法实例化接口 org.springframework.context.ApplicationContextInitializer:org.springframework.boot.context.ConfigurationWarningsApplicationContextInitializer 在 spring.boot@2.0.0.M2/org.springframework.boot.SpringApplication .createSpringFactoriesInstances(SpringApplication.java:439) 在 spring.boot@2.0.0.M2/org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:418) 在 spring.boot@2.0.0.M2/org.springframework .boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:409) 在 spring.boot@2.0.0.M2/org.springframework.boot.SpringApplication.(SpringApplication.java:266) 在 spring.boot@2.0.0.M2/ org.springframework.boot.SpringApplication.(SpringApplication.java:247) 在 spring.boot@2.0.0.M2/org.springframework.boot.SpringApplication.run(SpringApplication.java:1245) 在 spring.boot@2.0.0.M2/org.springframework.boot.SpringApplication.run( SpringApplication.java:1233) at test/com.foo.test.App.main(App.java:10) 原因: java.lang.NoClassDefFoundError: java/sql/SQLException at spring.beans@5.0.0.RC2/org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:145) 在 spring.boot@2.0.0.M2/org .springframework.boot.SpringApplication.createSpringFactoriesInstances(SpringApplication.java:435) ... 7 更多原因:java.lang.ClassNotFoundException:java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader) 处的 java.sql.SQLException .java:582) 在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185) 在 java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496) ...还有 9 个

0 投票
2 回答
1536 浏览

java - 模块 java.base 不读取模块 java.desktop

当我运行这个测试时(使用 jmockit 和 TestNG,不确定这是否相关):

我得到这个例外:

我正在使用构建 177。

我可以使用--add-reads java.base=java.desktop参数重新运行测试,它工作正常,但我真的不明白这里发生了什么。

为什么我得到那个例外?

0 投票
3 回答
12309 浏览

java - 在 Java 9 中加载类和资源

我正在阅读InfoQ 上引用 Reinhold的这篇文章:

开发人员仍然可以使用 Java 9 中的 Java 类路径供 Java 运行时搜索类和资源文件。只是有了 Java 9 的模块,开发人员不再需要类路径。

所以现在我的问题是:执行上述任务的正确 Java 9 方法是什么?您如何动态加载例如图像(不涉及相对路径)?

更有趣的是,如何检查一个类是否可用并动态做出决定(例如,检查 Jackson 是否可用,如果可用,将其用于 JSON 序列化,如果不使用其他东西)?

文章还提到 Spring Boot 已经支持 Java 9,而且 Spring Boot 肯定做了很多动态加载。所以也许有人知道我可以查看的 Spring 代码价格?