问题标签 [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.
java - Java 9:ServiceLoader 不会从测试源(模块)加载测试实现
我正在使用 Java9 模块系统(在 openjdk11 上运行)
我有
- 从 Java8 迁移而来,代码包含使用 ServiceLoader 机制的类。
此类的单元测试,它尝试加载两个测试服务实现
测试实现列在 META-INF/services 文件中
src/main/example/Service.java
和一个
src/main/module-info.java
我有一个像这样的单元测试
src/main/example/ServiceTest.java
我在测试源中有两个测试服务:
src/main/example/TestService1.java
src/main/example/TestService2.java
src/test/resources/META-INF/services/example.Service
我正在使用没有任何特定配置的 maven-surefire-plugin 3.0.0-M3
正确修补示例模块(来自surefireargs文件)
当我直接在 IntelliJ 中执行测试时,测试运行成功,找到了两个服务。但是,当我在 maven 中构建模块并由 surefire 执行测试时,它没有找到服务并且测试失败。
我应该如何配置surefire以找到位于测试源中的TestServices?我无法在模块信息中定义“提供...”声明,因为它们是测试服务。我究竟做错了什么?
java - 如果目标级别为 8,我可以使用 module-info.java 吗?
我知道 jdk9+ 可以识别 module-info.java
但是我想知道 module-info.java 是否仍然可以与目标级别 8 结合使用。
例如,我希望我的库用于 java9+ 项目,它会将其识别为导出特定包的模块,但也可以在 java8 项目中作为普通 jar 文件使用。
java - How to add maven dependencies of json to modules in >= Java 9
in java 8 projects you simply add the following dependencys in maven
Using OpenJDK, Eclipse 2018-12
and maven module, it results in getting a error in the module-info.java:
The package javax.json.stream is accessible from more than one module: java.json, org.glassfish.java.json
So in both dependency projects there is a package called javax.json.stream and due to jigsaw module system this is not allowed anymore?
How to fix this?
EDIT:
I updated the maven dependency to 1.1.4 and put them on the classpath.
The javax.json-api
has a module-info.java file and is working fine, eclipse shows no more errors.
But now the packages of the implementation javax.json (org.glassfish)
are not found, resulting in a ClassNotFoundException: org.glassfish.json.JsonProviderImpl
What more can I do?
EDIT:
Its working now, i forgot to generate a module-info.java in this project.
java - 如何在运行时扩展模块路径
我喜欢服务。我也喜欢模块系统。对我来说不幸的是,在我使用 Java 9 之前,我养成了在运行时通过 jar 从加载的 jar 中获取服务提供者的习惯URLClassLoader
,如下所示(为了简洁起见,我将使用 Java 10 var
):
这工作正常,即使在 Java 9 及更高版本中,但它会将 jar 加载到类路径中,这意味着它使用旧META-INF\services
方法来查找服务提供者。我宁愿使用该module-info
方法,但这需要将 jar 加载到模块路径上,但我找不到任何可以这样做的方法。所以我在这里,希望这里有更彻底了解模块系统的人会告诉我如何做到这一点(或者它不能,如果是这样的话)。
java - 项目 maven-builds 很好,但是当我创建 module-info.java 时,我得到“分叉的 VM 在没有正确说再见的情况下终止。”
我有一个使用 maven、spring-boot 并连接到 postresql 数据库的简单项目。当我运行 mvn clean install 时,一切都运行良好,甚至是测试。(我正在用 java 10 编译它)然后我添加一个 module-info.java 将它变成一个 java9 模块。现在,如果我构建它并且我没有 -DskipTests,我会收到以下错误:
并且 surefire-reports 文件包含:
(听起来有点像问题是文件路径中的空间,对吗?但如果是,我在哪里更正?)
所以,我认为这一定是模块信息的错,因为这是唯一改变的事情。我一直在纠结要放什么。自动生成的一个 Eclipse 似乎是错误的,例如因为它包含测试依赖项,这给了我其他错误。所以我尝试了一下,它目前看起来像这样:
这是我的pom:
知道是什么导致了错误吗?
java - 可以从 JDK 11 模块系统中的多个模块访问包
我们正在使用 Zulu JDK 11,但我们正面临问题包 com.sample.test 可以从多个模块访问:test1.module、test2.sample。
以下是示例项目的 git url 和屏幕截图供您参考。
java - 在教育环境中使用 Java 模块系统的最佳方式是什么?
我在大学环境中教授 Java 编程课程。在课程中使用最新的 LTS 版本(Java 11)是有意义的。我们使用 JavaFX 教授用户界面。然而,JavaFX 加上模块系统的组合会产生复杂性,尤其是对于初学者而言。
为了使用 JavaFX,必须有一个module-info.java
看起来像这样的文件:
学生通常为每门课程使用一个 Java 项目。在每门课程中,他们都会从我这里得到很多例子,并且会自己编写更多的程序。这些示例和练习中的每一个都有自己的主类,并且它们被组织成许多不同的包。
问题在于第一条exports
语句:据我所知,每条语句仅适用于单个包,不能使用通配符,也不包括子包。因此,如果我们有一个包含 50 个不同包的 Java 项目,module-info.java
将包含 50个exports
语句。这是一团糟。
也许这看起来微不足道,但对于刚学习编程的人来说,这又是一个障碍。我是否忽略了一些概括exports
以涵盖多个包的方法?或者,是否有人对如何为我的学生简化此问题提出了很好的建议?
eclipse - 部署时出现 JavaFX-11 错误:找不到模块
我正在尝试部署一个非常基本的 JavaFX 应用程序。我只是在创建一个新的 JavaFX 项目并尝试将其部署到 .exe,但它给了我一个找不到模块的错误。
这是控制台日志:
我正在使用 jdk11.0.4、JavaFX-11.0.2、eclipse 4.12.0 和 e(fx)clipse 3.5
java - 模块化项目使用 jOpenDocument 上升 InvalidModuleDescriptorException
我正在使用混合模块化和非模块化方法在 Eclipse 2019-06 中使用 java/javafx 12 开发模块化 java 项目。由于运行时出现异常,无法让程序运行。
我需要使用混合模块化和非模块化方法,因为该程序需要外部库。它们中的大多数都可以作为模块使用,但开发人员并未将 jOpenDocument 作为模块提供。
我没有收到 Eclipse 的任何抱怨,除了“自动模块 jOpenDocument 的名称不稳定”,这应该不是问题。
当我启动程序时,出现以下异常:
我在模块路径中有所有外部 jar,模块信息文件如下所示。
该项目可以使用非模块化方法顺利运行,但我想继续使用模块。我发现这两个参考是针对同一种问题
使用 Java 11 在 Eclipse 中混合模块化和非模块化开发
使用 Maven 构建具有非模块化依赖项的 JDK 9 项目需要什么
但没有帮我解决。
jOpenDocument 的源代码可在https://jopendocument.org/download/jOpenDocument-src-1.4rc2.zip获得,因此通过添加 module-info 文件将 jar 更新为模块是可行的。我也尝试过,但没有成功,如果有人能做到这将有助于我认为的社区。
有没有人这么好心地暗示我的模块化项目可以通过使用可用的 jOpenDocument 二进制 jar 或将其从源代码转换为模块来工作?