问题标签 [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.
java - Java 9 反射等效于 --add-modules 是什么?
我需要一种方法来告诉一个新创建的类加载器(没有设置父类)我想要暴露给它的模块(例如java.scripting
)。
--add-modules
在命令行上传递的反射等价物是什么?
java - 新的 Java 9 平台模块系统如何集成到 Maven 中?
我最近查看了新的Java 平台模块系统,它提供的功能似乎与 Maven 在 jar 文件之间的依赖关系管理方面提供的功能重叠。我想知道这个新的 Java 特性将如何影响 Maven,以及它是否已经集成到 Maven 或类似工具中,如果是这样,那将是一个 hello-world 使用示例。
干杯
java - JDK9 中的预定义模块是什么,或者我需要哪个模块来修复依赖问题?
JDK9(可能)会引入一个模块系统。作为其中的一部分,Java 类库将被模块化。
当类未找到时,这可能会导致异常,因为它们位于尚未指定为依赖项的模块中。
使用模块系统将创建哪些模块,它们各自的内容是什么?
或者换一种说法:给定一个未加载的类,我如何找到合适的模块作为依赖项包含在内?
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 存储库?
java - Java 9:将包导出到未命名的模块失败
我正在尝试针对 Java 9 构建一个开源项目。我需要使用反射访问一些文件,但我不能,因为它们的模块没有导出包。我使用 arguments 将包导出到未命名的模块--add-exports
。
我已将以下参数添加到环境变量_JAVA_OPTIONS
:
我正在使用最新的 JDK 9 构建(截至今天):
这是我尝试构建项目时的输出:
编译仍然失败,这让我想知道我做错了什么。
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;
为什么对导出语句放宽这个循环规则?
和
java - Java 9 上的 Java 代理
在 java 9 之前,监控JavaAgent
被加载到 JVM 中,boostrapClassloader
以便被监控的应用程序可以访问它们
使用 Java 9 模块化架构,只能java.base module
在 Bootstrap 类加载器中加载,所以 Java 代理只能访问 java.base 中的类?默认情况下它不能访问 java.base 之外的任何东西?
javaAgent
为了访问 java.sql 等其他模块,需要在内部进行什么更改?
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 个
java - 模块 java.base 不读取模块 java.desktop
当我运行这个测试时(使用 jmockit 和 TestNG,不确定这是否相关):
我得到这个例外:
我正在使用构建 177。
我可以使用--add-reads java.base=java.desktop
参数重新运行测试,它工作正常,但我真的不明白这里发生了什么。
为什么我得到那个例外?
java - 在 Java 9 中加载类和资源
我正在阅读InfoQ 上引用 Reinhold的这篇文章:
开发人员仍然可以使用 Java 9 中的 Java 类路径供 Java 运行时搜索类和资源文件。只是有了 Java 9 的模块,开发人员不再需要类路径。
所以现在我的问题是:执行上述任务的正确 Java 9 方法是什么?您如何动态加载例如图像(不涉及相对路径)?
更有趣的是,如何检查一个类是否可用并动态做出决定(例如,检查 Jackson 是否可用,如果可用,将其用于 JSON 序列化,如果不使用其他东西)?
文章还提到 Spring Boot 已经支持 Java 9,而且 Spring Boot 肯定做了很多动态加载。所以也许有人知道我可以查看的 Spring 代码价格?