问题标签 [module-info]

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 投票
0 回答
83 浏览

java - 针对旧版 JDK 的 JPMS/Jigsaw 兼容 Java 库

我试图弄清楚如何使用 Maven 构建与 JDK 7 和 8 兼容的库 jar 文件,但包含一个module-info.java明确声明其公共 API 的文件。

问题:我需要为旧的目标版本进行编译,但旧的 JDK 显然不知道新的 JPMS 功能。

Robert Scholte 的这次演讲中,似乎最好的方法是仅使用 JDK9 编译模块信息文件。但是我如何将它包含到 .jar 中呢?

任何最小的例子pom.xml都会有很大的帮助!:-)

编辑:要清楚一点:我没有收到任何编译器错误。我只是在询问为 JDK 9 用户使用 JPMS 的基本概念,但要让我的库向后兼容 JDK 7 和 8。

0 投票
2 回答
58668 浏览

java - 使用 java 9 时执行 maven-compiler-plugin:3.6.1:testCompile 失败

我知道有很多类似错误的问题。在此之前我会很感激,因为重复考虑到它只发生在 Java 9 上。

我确实安装了 java 9

为了简化示例,如果我下载一个非常简单的示例https://examples.javacodegeeks.com/core-java/java-9-httpclient-example/并尝试/

mvn 干净安装包 -e

pom.xml

我有点困惑可能导致此问题的原因。最重要的是,我面临另一个挑战,这让第一次尝试使用 Java 9 的人更加困难:我的 Eclipse 没有正确接受 Java 9。我尝试在我刚刚下载的 Eclipse Oxygen 中安装 Java 9 Support它,但我得到“在http://download.eclipse.org/eclipse/updates/none找不到存储库”。而且我不能让这个 mvn 插件将 Java 版本更新到 9(它曾经在 Java < 1.8 时正常工作:

这就是我试图从命令行编译 straich 的原因。

我读到 Java 9 带来了模块化的新概念,这将帮助我们更好地组织包,但如果这能促使我解决我的问题,我会非常有限。当有人看到“无法解析模块信息”时,这可能是一些明显的解决方案,但我无法想象有什么有用的尝试。

我的直接问题是我可以检查什么以便编译。关于使 Eclipse Oxygen 当前版本与 Java 9 兼容的另一个技巧也将受到重视。

  • 已编辑

在此处输入图像描述

不到 24 小时前为 Windows 下载的 Eclipse 版本:

面向 Web 开发人员的 Eclipse Java EE IDE。

版本:Oxygen.2 版本 (4.7.2) 内部版本号:20171218-0600

  • 第二次编辑

在我从 1.9 更改为 9 之后,红色错误图标消失了,我现在有了 Java 9。不过,现在我收到了这个错误:

这对我来说没有意义,因为:

在此处输入图像描述

  • 第三次修改

在此处输入图像描述

0 投票
3 回答
1115 浏览

java - JPMS 是否支持模块版本?

我认为 JPMS 不支持模块版本。但是,当我这样做时,java --list-modules我有以下输出:

所以,我无法理解这@9是什么。是这个版本还是什么?如果 JPMS 支持模块版本,我可以在模块 A 的 module-info 中设置模块 A 需要特定版本的模块 B 吗?

0 投票
1 回答
7564 浏览

java - ServiceLoader::load 与命名模块的未命名模块交互

我有一个这样的项目:

的实现UnnamedStart.java是:

请注意,main是未命名的模块。

api/src/module-info.java是:

并且impl/src/module-info.java是:

更新 1.1 - 下面更新的代码见评论,添加requires

更新 1.2 - 下面的代码已更新,在创建问题时provides A with B更改为provides B with A错误,原本没问题

当我在中运行我的代码时,UnnamedStart.java我最终没有在services.

我还尝试在以下位置创建一个静态方法com.foo.api.ApiInterface

并添加,但它给出了相同的结果(什么都没有)api/src/module-info.javauses com.foo.api.ApiInterface;

我使它工作的唯一方法是将main从未命名模块迁移到命名模块。

1.当未命名模块尝试与命名模块交互时, java 9是如何工作的?

2.是否有可能让它工作并保持主要的未命名模块?

更新 1.3 -添加了相关项目

0 投票
1 回答
2190 浏览

java - 列出应用程序启动期间解析的模块

如何在应用程序启动时了解已解析的模块列表,从而确定从根模块可以访问哪些服务提供者。

0 投票
10 回答
232672 浏览

java - 无法使用 Maven 编译简单的 Java 10 / Java 11 项目

我有一个简单的 Maven 项目:

pom.xml:

当我通过 构建项目时mvn -X install -DskipTests=true,它失败了:

有没有办法来解决这个问题?

0 投票
1 回答
1528 浏览

java - 带有模块逻辑的 java 运行时错误:java.lang.NoClassDefFoundError: javax/xml/ws/Service

因为我迁移到 jdk9 我在运行时收到以下错误:

我没有收到编译错误,但只有运行时错误。模块信息如下:

并且 pom.xml 包含以下依赖项:

即使我尝试了不同的配置,最终的结果仍然是这个烦人的错误!有人知道这里发生了什么吗?

0 投票
0 回答
691 浏览

gradle - 使用 gradle 合并 jar 以进行拆分包

我创建了一个 Web 应用程序。我正在使用 Gradle。我是 Gradle 的新手,我正在尝试将我的一个项目迁移到 Java 9 模块系统。我将所有 jar 移动到模块路径而不是类路径。这是我的 build.gradle 的片段

现在,如果我执行 gradle buildor buildDependentsortestClasses任务,那么我会收到以下错误

那么为什么我得到模块未找到异常jUnitlog4j.apiorg.apache.logging.log4j.web。我检查了模块路径并且罐子在那里。

其次,我阅读了有关拆分包的信息。我的问题是,我从错误中知道这两个罐子是java.sql and javax.transaction.api并且jaxb.runtime and jaxb.core与其他罐子相似。

我可以制作一个 Gradle 任务,将这两个 jar 合并为一个,并在模块路径中包含那个 jar,以便可以删除这些错误?还是有另一种方法来解决此类错误?

是否可以将一些 jar 移动到模块路径并将一些 jar 移动到类路径?以及如何找到要移动模块路径的 jar 以及要移动类路径的 jar?

谢谢

0 投票
1 回答
1092 浏览

java - 为什么需要传递仅限于直接需要包含它的模块的模块?

假设有一个模块x可以导出一些东西。然后是模块a

然后有 100 个模块b需要a

然后有100个模块c需要各自b的s

假设c1...c100不需要了解来自a. 这些仅由b1...b100内部使用,因此不需要传递。

b1然而,由...导出的 APIb100使用由 . 导出的包中的类x

模块c1...c100看不到那些。试图编译它们,结果是

为什么requires transitive仅限于直接需要包含它的模块的模块?module-info如果不编辑 100 个文件,如何解决上述问题?


更新:至少有 3 种方法可以“解决”这个问题:

  • 添加requires transitive ab1...b100
  • 添加requires transitive xb1...b100
  • 添加requires xc1...c100

虽然在这种特殊情况下所有都可以工作,但尚不清楚应该使用哪一个以及它们各自的副作用是什么。此外,这只是 3 级深层次结构 - 层次越多,它就越复杂。

如果requires transitive对所有依赖项都是可传递的(正如传递这个词所暗示的那样),这将自动解决。如果没有transitive,就只有一种方法可以解决这个问题。仅限于直接家属,有transitive一些“选项”需要考虑,但似乎没有提供足够的信息供人们做出正确的选择。

0 投票
0 回答
454 浏览

java - 注释处理器自 java9 以来不工作

我有一些注释处理器在 Maven 项目中生成源文件。这按预期工作,但我正在尝试迁移到 java9,现在它们不再执行,或者我认为。

注释处理器通过以下方式注册

并在 module-info.java 中提供

但它不工作。我是否必须在 java9 中使用 maven 做一些额外的事情,还是应该像这样工作,我可能还有其他错误?