问题标签 [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 回答
1572 浏览

java - Javadoc 如何处理 Java 9 中模块的可见性?

Javadoc 工具根据可访问性修饰符生成文档。默认情况下,它记录所有publicprotected、字段和方法。这可以通过以下选项进行更改:

-public
仅显示公共类和成员。

-protected
仅显示受保护的和公共的类和成员。这是默认设置。

-package
仅显示包、受保护和公共类和成员。

-private
显示所有类和成员。

Java 9 引入了模块的概念,Jigsaw 项目将其应用于现有的 JDK。Mark Reinhold 的一次演讲(关于模块的系列演讲中的第 3 次)展示了public修饰符现在如何具有不同级别的可访问性,具体取决于模块的可见性(通过exports):

  • 向所有人公开
  • 公开但仅限于特定模块
  • 仅在模块内公开

由于现在并非所有公共成员都可以访问,因此继续使用相同的 Javadoc 生成方案就没有什么意义了。只有暴露在“足够”级别的成员才应记录在案。

Javadoc 模块感知吗?除了上面的命令选项之外,是否还有命令选项来处理额外的曝光层?对于只暴露给特定模块的公共成员,Javadoc 是否列出了这些,如

?

0 投票
2 回答
9113 浏览

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

面对 Jigsaw 相关的更改,我似乎找不到任何关于在运行时是否仍然可以扫描所有可用类(用于接口、注释等)的信息,就像 Spring、Reflections 和许多其他框架和库目前所做的那样类的加载方式。

编辑:这个问题是关于扫描寻找类的真实物理文件路径。另一个问题是关于动态加载类和资源。它是相关的,但非常不重复

更新:Jetty 项目为此了一个标准化 API的JEP 提案。如果您有办法帮助实现这一目标,请这样做。否则,等待和希望。

更新 2:找到这个相关的发声帖子。为后代引用代码片段:

如果您真的只是想查看引导层中模块的内容(在启动时解析的模块),那么您将执行以下操作:

0 投票
3 回答
18314 浏览

java - 包与 Java 9 中的自动模块冲突

随着 Java 9 的临近,我认为将我的一些项目移植到 Java 9 将是一个很好的学习练习。在我的一个项目中,我依赖于rxjavarxjavafx

我想将此项目创建为命名模块。为此,我需要创建一个module-info.java文件,并且需要在此处指定和的rxjava要求rxjavafx。但是,这些库还没有任何模块信息。

为了解决这个问题,我读到我需要创建 Automatic Modules。据我了解,我需要将 jar 重命名为一个简单的名称,rxjava然后在参数rxjavafx中列出这些 jar 。然后我在我的 jar 名称中--module-path添加一个requires指令。module-info.java

我编写了一个 gradle 任务来为我编辑 jar 名称,它似乎在大多数情况下都有效。它需要所有需要编译的 jars 并将它们重命名为不包含版本信息或斜杠。然后将文件连接成一个:单独的字符串:

自然地,这些rx库共享它们的一些包名称......但这会导致编译器吐回错误,例如:

似乎解决此问题的唯一方法是将其内容重新打包到一个 jar 中rxjava并将rxjavafx其添加为单个模块。虽然这似乎不是一个好的解决方案......

所以我的问题是:

  • 我是否正确使用了新的模块系统?
  • 我能做些什么来处理这个错误?和
  • 这些依赖项是否阻止我更新,或者我应该等待 rx 更新他们的库?

注意:我尝试使用标准java/运行它javac,它们会导致相同的问题。这也是我的java版本:

0 投票
2 回答
44004 浏览

java - 无法从 java.base 模块导出包

使用 IDEA-EAP 进行 JDK9 开发实验。

我收到以下错误 -

类定义为 -

我尝试module-info.java在使用 IDE 创建的模块中也包含一个文件,其中包含以下语句 -

目录结构现在看起来如图所示 -

目录结构

IDE 虽然反映了module-info.java未使用的情况,这可能是我无法定义上述module com.jigsaw.npe尝试的原因。

寻找有关如何正确放置 module-info.java 和/或我错过的任何其他内容的帮助。

0 投票
1 回答
146 浏览

java - 在哪里可以找到 Java 9 模块描述符参考?

模块系统的最新状态似乎有点过时,因为它仍然提到“需要公共”而不是“需要传递”。

我在哪里可以找到模块系统的最新规格?

0 投票
10 回答
35368 浏览

java - RuntimeException:在模块 jrt.fs 和模块 java.base 中打包 jdk.internal.jimage.decompressor

组件详细信息- 使用IntelliJ IDEA 2017.1 CEjdk-9-ea+154

主要() -

模块信息.java

日志-

对 VM 初始化的实现持怀疑态度,我的问题是我没有包含模块jrt.fs- 图片来自哪里?如何调试此类模块的包含/排除?如何进一步解决当前的异常?

0 投票
0 回答
857 浏览

java - 为什么模块名称中禁止使用终止数字?

我创建了一个名称java9为 Java 9 模块的 Java 项目。我有以下内容module-info.java

但是 javac 编译器抱怨我的模块名称中的数字:

在运行时 java 也抱怨:

谁能解释为什么禁止终止数字?commons-lang3为了避免这种限制,图书馆应该怎么做?如果我有一个类似base64or的库名称sha3怎么办?

这个问题不包含我的问题的答案。它回答了如何避免错误,但没有回答为什么 Java 在命名方案中如此严格。

0 投票
1 回答
477 浏览

java - 在 Java 9 中,为什么在某些情况下对包冲突的处理会有所不同?

我正在试验 Java 9 并查看以下场景:

实验一

  • 模块 A
  • 模块 B
  • 两者都声明了一个名为 com.foo 的非空包,但不导出它
  • 两者都是第三个模块 C 所必需的

从“C”运行 main 会产生运行时错误:

java.lang.RuntimeException:在模块 B 和模块 A 中都包 com.foo

实验二

和以前一样,但这次都导出 com.foo。

从 C 执行 main 的结果:

java.lang.module.ResolutionException:模块 B 和 A 将包 com.foo 导出到模块 C

实验三

与 2 相同,但这次我在模块 C 中声明了包 com.foo。

现在我得到一个编译错误: Error:(4, 1) java: module C reads package com.foo from both A and B

为什么在编译过程中也没有发现前两种情况?在执行程序之前是否有我不知道的运行时属性排除解决方案?

此外,就错误消息而言:实验 2 中的错误消息比实验 1 中给出的错误消息以何种方式更好。并不是说如果其中一个模块不导出它,最终结果会有所不同. 换句话说,产生不同错误信息背后的考虑是什么?

0 投票
1 回答
347 浏览

gradle - Gradle 的模块化支持

我从这个链接了解到 gradle 3 启用 Java 9 支持但不支持模块路径。

https://blog.gradle.org/java-9-support

另外,我发现这个 github 链接讨论了 jdk 9 支持。

https://github.com/gradle/gradle/blob/master/design-docs/jdk9-support.md

gradle 3.5 是否支持使用 jdk 9 编译模块化代码?有人试过吗?

0 投票
3 回答
4888 浏览

java - 我可以通过 MANIFEST.MF 要求 Java 9 模块吗?

我的 Java 库应该与 Java 8 和 Java 9 兼容。为了使用 Java 9 运行,我们需要一些 Java 9 模块。

我知道我可以通过命令行添加它--add-modules。但它是一个库,我无法控制命令行。

有相当于--add-modulesinMANIFEST.MF吗?还是有其他与 Java 8 兼容的解决方案?