问题标签 [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 和更早版本的模块化 Java 应用程序
我的应用程序在 Java 8 及更早版本上运行良好,但无法加载不属于 Java SE 的类并且失败并出现以下问题:
我最初的想法是模块化我的应用程序并确定我需要的类是否有一个公共模块来正确声明依赖关系。但是,一旦我宣布 dummy module-info.java
,javac
就开始抱怨:
编辑:我正在指示 maven-compiler-plugin 生成与 java 6 兼容的字节码,因为我需要应用程序来支持它。实际使用的参数是-g -nowarn -target 1.6 -source 1.6 -encoding UTF-8
.
也许我遗漏了一些明显的东西,但是我如何构建一个可以与 Jigsaw 以及没有它的旧 Java 版本一起使用的 jar?
java - Java 9 中的“模块本地”访问行为
由于Jigsaw
项目的核心是 Java 模块系统,因此最好能够限制对特定模块内特定程序元素(类、方法和字段)的访问。
当模块中有一些元素对于这个模块本质上是公共的,但不应该在这个模块之外访问时,它会很有帮助。
所以我说的是“package-local”之后的下一个访问级别,可以命名为“module-local”。
然而,对Jigsaw 规则和早期规范的简要了解并没有帮助我找到这种功能。更具体地说,本Modifier
规范不包含任何新元素。
那么在未来的 Java 9 中还有其他可能性吗?
java-platform-module-system - Jigsaw 无法使用 jar 工具创建模块化 JAR
我正在使用构建 9-ea+129-jigsaw-nightly-h5332-20160730
我有一个非常简单的模块,它有一个 Main 类和一个 module-info.java
我使用 javac --module-source-path 编译模块,一切正常。正在为 module-info.class 和 Main.class 生成类文件
当我尝试使用 jar 工具创建模块化 JAR 文件时,我收到以下错误消息:
我的 module-info.class 在根目录中。
我跑:
你能告诉我为什么会出现这个错误以及我做错了什么吗?
谢谢
问候
domain-driven-design - Java 9 模块和 DDD 中的双重分派
在我的一些项目中,我使用双分派机制在运行时向我的域模块提供我的基础结构模块的“视图”(加强您的域:双分派模式)。我在上面所说的“模块”只是单独的 jar 文件,其中来自 service.jar->domain.jar 的依赖项仅在编译时强制执行。如果我将我的服务和域定义为“真正的”java 9 模块,我是否能够在 java-9 上使用它?
maven - 拼图项目与 Maven
来自拼图项目:
让开发人员更轻松地为 Java SE 和 EE 平台构建和维护库和大型应用程序。
我正在尝试了解 Jigsaw 项目是什么,到目前为止,Jigsaw 项目的目标似乎与我们使用 Maven(或 Gradle)依赖管理所做的有些重叠:
- 构建像 Maven 这样的工具是一种威胁吗?
- 或者我的理解是错误的,Jigsaw 项目将以某种方式补充这些构建工具?
java - 无法识别的选项:-modulepath
有没有其他人在运行模块时遇到这个问题,它在 java 9 mac 版本中抱怨这个问题?
下面是问题!
如何重现?我正在做这个例子。最后一步是使用以下命令运行模块。那是我看到问题的时候。
这是一些背景信息。. 我开始玩 java 9(mac 版)。
我什至无法正确卸载 java 9。但是,我稍后会解决这个问题。
任何帮助将不胜感激!
java - Java 9 模块系统是否支持可选依赖项?
背景
在 Maven 中,工件可以声明一个依赖项
这意味着依赖项不是必需的,但如果存在则可以使用。
模块系统的状态似乎指定一个模块只能读取它需要的模块。
问题
- Java 9 模块系统真的不支持可选依赖吗?
- 为什么不?
- Java 9 模块系统提供了哪些可选依赖项的替代方案?
用例
我有一个框架,它集成了应用程序可能使用或不使用的各种库。目前,这个框架是一个单一的 JAR,它反映了类路径以跳过缺少库的集成代码。
我想我们可以为每个配置将它拆分为一个单独的模块,但这会导致 JAR 数量的组合爆炸,因为我们不仅需要为每个可选依赖项提供一个单独的 JAR,而且还需要一个单独的 JAR 用于大多数对可选依赖项...
java - “打开”模块的 JDK 编译器失败
使用当前 JDKbuild 9-ea+143
的javax.tools.JavaCompiler
工具,我可以编译简单(空)示例模块而不会出现错误:
如果我添加open
如下:
...编译器错误显示:
语法基于http://cr.openjdk.java.net/~mr/jigsaw/spec/lang-vm.html
当前的 JDK 9 版本是否与此规范不是最新的,还是我缺少要传递给的选项JavaCompiler
?
java - 使用 Maven 构建具有非模块化依赖项的 JDK 9 项目需要什么
我有一个简单的 Java 9 SE 项目,它依赖于一个非模块化项目(本示例选择 Weld SE),我正在尝试使用 Maven ( clean install
) 构建它。为了让 Java 9 启动,我添加了module-info.java
. 最初,这个文件只包含模块名称,没有requires
公式。
请记住,我唯一的依赖项不是模块化项目,因此我假设 Maven 将放入类路径(而不是模块路径),因此它将以模块化系统状态中所述的方式unnamed module
结束。
现在,我的 Maven 版本是 3.3.9,我知道我需要在 3.6 版本中使用 Maven 编译器插件,如此处所述当然我已经下载了 JDK 9 EA build with jigsaw 并设置 Maven 使用它。
如果我在没有 的情况下构建我的项目module-info.java
,一切正常,东西被添加到类路径并构建成功。我想 Maven 只是坚持使用旧方法,只要您忽略该文件。
但是用 module-info.java
它构建它告诉我在类路径中找不到我的依赖项中的类。所以我在调试模式下(使用-X)运行了 Maven,并且确实 -所有 jar 都在 module-path 下并且 classpath 是 empty。这实际上意味着我的所有依赖项都转移到了自动模块中,我需要在module-info.java
.
一旦我声明了自动模块要求(链接到项目的module-info
),我就可以在 JDK 9 上构建它。但这有点乱——我唯一的pom.xml
依赖是 on weld-se-core
,但我module-info
要求我声明更多的要求才能通过编译。
这是一个可以观察到所有这些的整个GitHub 项目。
所以我的问题是:
- 如果我知道它们不是模块化的,我可以告诉 Maven 将一些工件放在类路径上吗?这样我就可以避免
automatic module
和需要声明它们? - 如果我坚持使用
automatic module
,我可以告诉 Maven 以某种方式传递地允许我的依赖项需要引入的任何东西吗?例如 Weld 的其他部分、CDI API 等。 - 实际原因是什么,为什么我需要说明我的项目
requires
模块,我不直接使用?例如weld.environment.common
ant - 在 Ant 中使用 Java 9 模块系统
我对 Ant 和 Java 9 模块系统都很陌生,所以请多多包涵。我正在将一个现有的 Ant 项目移植到使用 Java 9 上,随之而来的是模块的使用。
特别是,现在我有 2 个不同的模块,一个需要另一个模块,如下所示:
在构建期间baz
,我收到一个错误:module not found: org.bar.foo
。
在查看了一些示例之后,我尝试--module-path
在构建文件中通过编译器 arg设置baz
,但到目前为止我还没有运气。我不太确定在指定模块路径时我能有多具体/通用。