问题标签 [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 - 如何在 Maven 中表达对 java ee 特性的依赖以过渡到 Java 9?
我们使用maven
并拥有依赖于其他内部工件的工件。我正在迁移到java-9,并打算首先将所有内容迁移到 Java 9 而不模块化代码(即在未命名的模块中)。
我遇到的问题是我们依赖于java.xml.bind
,它现在不包含在默认模块中。是否有一种“正确”的方式来表达对java.xml.bind
Maven 的这种依赖?
java - Java 9 中创建了多少个未命名的模块?
我试图了解 JPMS 是如何工作的。
从这里
类路径还没有完全消失。类路径上的所有 JAR(模块化或非模块化)和类都将包含在未命名模块中。与自动模块类似,它导出所有包并读取所有其他模块。但它显然没有名字。因此,命名的应用程序模块不能要求和读取它。未命名的模块反过来可以访问所有其他模块。
请注意...on the classpath will be contained in the Unnamed Module
。模块是单数的。
从这里
为了兼容性,类路径上的所有代码都打包为一个特殊的未命名模块,没有隐藏的包和对整个 JDK 的完全访问权限。
再次unnamed module
。模块是单数的。
我是否理解在 JPMS 中总是只有一个未命名的模块?这是否意味着在 Java9 之前开发且未针对 Java9 更新的应用程序将作为一个未命名的模块加载?
java - 是否可以在 javac(JDK 9)中混合 --class-path 和 --module-path ?
当我编译一个依赖于我之前编译过的其他模块的模块时,我必须指定该--module-path <directory>
选项。这使得我依赖的模块可见。
但同时我也想让一些非模块化的 Jar 文件可见。但是,如果不使它们成为自动模块并仅指定--class-path some.jar
旁边的右侧--module-path <directory>
,那么javac似乎会忽略 claspath 并抛出“未找到包 yyy”和其他“未找到”错误。
我可以理解在同一(编译)时间使用--class-path
and是非法的,但javac不会以任何方式警告我。--module-path
java - ResolvedModule、Module 和 Observable Module 有什么区别
这些状态中的每一个的文档如下:
已解析模块图中的模块。ResolvedModule定义了配置方法来获取已解析模块所在的配置。它定义了引用方法来获取对模块内容的引用。
表示运行时模块,命名或未命名。
问:- 这两者何时不同,是在编译和运行时,还是只是模块的不同表示?
另一方面,模块路径定义
编译时或运行时环境中内置的模块,以及由模块路径上的工件定义的模块,统称为可观察模块的宇宙。
问:- 所有这些都相关吗?有人可以举例说明如何以及在什么时间解释这个概念吗?
java - Java 9u181 javac:找不到模块目录
我正在尝试编译一个简单的模块,但是,我不断得到这个:
我正在使用一个 Oracle Java 9u181 docker 镜像,我将它放在一起用于试用 Java 9,adenix/java:9u181。
项目结构
模块信息.java
主.java
更新 1
这是我的 Dockerfile,概述了我安装 Java 9u181 所采取的步骤
Dockerfile
java - Java 9 Jigsaw 将如何影响普通的 Maven/Gradle Java 应用程序?
我已经阅读并完成了Jigsaw 快速入门中的所有练习
我还注意到,我所有现有的 Maven/Gradle/SBT Java 项目似乎在 Java 9 下都可以正常工作,没有任何更改或好处。没有定义或使用 Java Jigsaw 模块。
Maven/Gradle/SBT 的普通 Java/JVM 世界是否会以更明显的方式采用 Jigsaw?JVM 世界的所有库和框架都将使用 Jigsaw 吗?今天存在的 Maven 依赖系统有什么理由或好处吗?普通 Java 开发人员使用 Jigsaw 有什么意义或好处吗?
编辑:我用这些搜索词阅读了几个 StackOverflow 问题,但没有一个解决了我的问题。链接的 StackOverflow 问题来自一年多以前,关于 Maven 3.3 对 JDK 9 早期版本的错误。这完全无关紧要。我没有收到错误。此外,Maven 3.5 和最终的 JDK 9 在本文发布时已经发布。
java - 如何为其名称中包含“-”(连字符)的工件添加“要求”
我在我的 Maven pom.xml 中包含了这些依赖项:
我正在尝试在 module-info.java 中添加此依赖项,如下所示:
对于 commons-io,我收到编译错误。我怎样才能使这项工作?
java - JDK 9 + Mac OS + jlink?
我在 Mac OS 上安装了 JDK 9 的发行版。
jshell 很好用,Jigsaw 模块支持很好用,但是没有 jlink:
这是空的:
供参考:
java - 如何运行 JDK 9 jlink 生成的图像?
我在这里遵循 Jigsaw快速入门。我成功运行了jlink
给定的命令:
这会产生一个“运行时映像”,它是一个展开的目录结构,如下所示:
我该如何运行?我期待一个二进制可执行文件,而不是一个分解的目录树。
该bin
目录有一个java
和一个keytool
。我没有看到任何 .jar 文件或 .class 文件可以通过捆绑的java
可执行文件运行。
java - Java 9 模块和 JUnit 4
日食氧气;Windows 7的; JDK 9 final 从 9、21;JUnit 4.12 和现有应用程序。作为起点,可以编译、执行应用程序,并且所有 JUnit 测试都显示为绿色。现在我们使用eclipse生成文件module-info.java。结果如下所示:
但出现错误:junit 无法解析为模块。问题是:如何告诉文件junit没有定义任何模块,它应该在兼容模式下运行?