Tag: java module

如何替换–add-modules java.xml.ws

我确实将基于Maven的项目迁移到了SpringBoot 2.0和Java 9.在这个过程中,我不得不添加一些依赖项来摆脱有关模块的Java 9警告(仍然可以使用–add-modules添加)。 但是我无法摆脱–add-modules java.xml.ws 正如JEP 320中所建议的那样,添加依赖项: javax.xml.bind jaxb-api 2.3.0 com.sun.xml.bind jaxb-impl 2.3.0 com.sun.xml.bind jaxb-core 2.3.0 这些依赖关系允许运行mvn test来运行。 IntelliJ IDE的构建也有效。 但是,在启动Spring Boot应用程序时,我得到以下运行时exception: … Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496) at javax.xml.bind.ServiceLoaderUtil.nullSafeLoadClass(ServiceLoaderUtil.java:122) at javax.xml.bind.ServiceLoaderUtil.safeLoadClass(ServiceLoaderUtil.java:155) at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:174) … 64 more 我错过了哪些Maven依赖项? JarFinder告诉我实现类是jaxb-impl的一部分,但只有2.2.12版本。 那么这个实现在哪里消失了?

使用新的Java模块系统加载服务提供程序我还缺少什么?

我正在将module-info.java添加到Ikonli软件包中,我的服务类遇到了麻烦。 ikonli-core定义了一个名为IkonHandler的接口。 ikonli-fontawesome5-pack有一个名为FontAwesomeSolidIkonHandler的IkonHandler 服务提供商 。 这些服务产品由ikonli-javafx的IkonResolver 。 鉴于此,我创建了这些模块定义: module org.kordamp.ikonli.core { exports org.kordamp.ikonli; } module org.kordamp.ikonli.javafx { exports org.kordamp.ikonli.javafx; uses org.kordamp.ikonli.IkonHandler; requires javafx.graphics; requires org.kordamp.ikonli.core; } module org.kordamp.ikonli.fontawesome5 { exports org.kordamp.ikonli.fontawesome5; provides org.kordamp.ikonli.IkonHandler with org.kordamp.ikonli.fontawesome5.FontAwesomeBrandsIkonHandler, org.kordamp.ikonli.fontawesome5.FontAwesomeRegularIkonHandler, org.kordamp.ikonli.fontawesome5.FontAwesomeSolidIkonHandler; requires org.kordamp.ikonli.core; requires org.kordamp.jipsy; } 它们可能不完整,但它们足够完整,以便在我的应用程序启动时,它会因此错误而失败: java.lang.UnsupportedOperationException: Cannot resolve ‘fas-user’ 没有处理程序设法加载图标时抛出: public IkonHandler resolveIkonHandler(String value) { requireNonNull(value, “Ikon […]

在Java 9中创建了多少个未命名的模块?

我试图了解JPMS的工作原理。 从这里开始 类路径还没有完全消失。 所有JAR(模块化或非模块化)和类路径上的类都将包含在未命名模块中。 与自动模块类似,它导出所有包并读取所有其他模块。 但显然它没有名字。 因此,命名的应用程序模块不能要求和读取它。 未命名的模块又可以访问所有其他模块。 请注意…on the classpath will be contained in the Unnamed Module 。 模块是单一的。 从这里开始 为了兼容性,类路径上的所有代码都打包为一个特殊的未命名模块,没有隐藏的包和对整个JDK的完全访问权限。 再次unnamed module 。 模块是单一的。 我是否理解JPMS中始终只有一个未命名的模块? 这是否意味着在Java9之前开发但未针对Java9更新的应用程序将作为一个未命名的模块加载?

如何正确地抑制“需要自动模块的传递指令”警告?

将Maven项目升级到Java 9并添加模块描述符后, javac抱怨自动模块的传递依赖: [警告] /…/scrc/main/java/module-info.java:[3,35] requires transitive指令用于自动模块 重现问题的示例module-info.java : module com.example.mymodule { exports com.example.mymodule.myexportedpackage; requires transitive com.google.common; } 这个警告的含义是完全清楚的,这里有一些相关的链接: 需求和需要Java 9中的传递语句有什么区别? 为什么javac抱怨命名的自动模块? 相关的OpenJDK问题 问题是 – 如何在不修复实际问题的情况下抑制此警告 ,并且不禁用所有其他javac警告? 我尝试了以下选项,但没有一个工作: @SuppressWarnings(“module”) @SuppressWarnings(“all”) -Xlint:all,-module命令行选项 不幸的是,我无法解决实际问题(现在),因为“my”模块具有来自第三方(自动)模块(例如Guava)的返回类型和注释。 因此,如果我使用“require com.google.common”(不具有transitive ),则会出现不同的警告,例如: [警告] … / MyClass.java:[25,20]类com.google.common.collect.Table 。模块com.google.common中的表没有使用requires transitive间接导出 当然,我无法为第三方库(现在是自动模块)定义模块描述符。 我正在使用-Werror ,我宁愿保留,所以警告不仅仅是烦人的…… PS我不打算将我的工件发布到任何公共存储库。

如何在Java 9中以其名称获取模块?

如何在Java 9中通过字符串名称获取java.lang.Module ? 例如,我们有 String name = “some.module”; Module module = //how to get here it?

在不定义其他模块的情况下,使用Spring JAXB Marshaller和Java 9的正确方法

为了说明我的问题,我创建了一个小的spring boot示例应用程序。 该应用程序的目的是创建一个Jaxb2Marshaller bean。 @SpringBootApplication public class App implements CommandLineRunner { public static void main(String[] args) { SpringApplication.run(App.class, args); } @Bean public Jaxb2Marshaller jaxb2Marshaller() { Jaxb2Marshaller bean = new Jaxb2Marshaller(); bean.setContextPath(“ch.sahits.game.helloworld”); return bean; } @Override public void run(String… args) throws Exception { System.out.println(“Started up”); } } 此代码无法启动exception: Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185) […]

在Java中动态加载模块(类)的最佳方法

我目前正在编写一个需要在不同类型的设备上运行的应用程序。 我的方法是创建一个“模块化”应用程序,它可以根据操作所需的设备动态加载不同的类。 为了使应用程序易于扩展,我的目标是为其他模块(.jar或.class文件)分配一个特定的路径,保留核心程序。 当不同的客户需要不同的模块时(这不需要为每个模块编译不同的应用程序),这将是至关重要的。 这些模块将实现一个通用接口,而“核心”应用程序可以使用接口上定义的这些方法,让单个实现完成工作。 根据需要加载它们的最佳方法是什么? 我正在考虑使用URLClassLoader,但我不知道这种方法是否是根据新的模式和Java趋势是最新的,因为我想避免设计糟糕的应用程序和弃用的技术。 使用JDK 9制作模块化且易于扩展的应用程序的另一种最佳方法是什么 (可以通过将模块文件添加到文件夹来扩展)?

如何从Java 9模块导出所有包?

现在,对于我拥有的每个模块,我都需要明确指定要导出的包。 例如: module core { exports cc.blynk.server.core; exports cc.blynk.server.core.protocol.handlers.decoders; exports cc.blynk.server.core.protocol.handlers.encoders; } 但是,它不是很方便。 我想做那样的事情: module core { exports cc.blynk.server.core.*; } 有没有办法做到这一点? 这种限制来自哪里?

如何使用Gradle制作多版本JAR文件?

Java9引入了Multi-Release JAR 。 假设我有使用java8的多模块Gradle项目: project-root settings.gradle build.gradle /module1 /src … (common maven structure) /module2 /module3 这是Gradle中常见的多模块项目。 假设我需要module1 MR-Jar。 我不能添加针对Java9的module1 module1-java9因为基础是8 – 到目前为止,我的Gradle和IntelliJ IDEA都抱怨。 Gradle是用java8编译的,但是我需要为模块启用java9运行时(不知道怎么做); 在IntelliJ IDEA中我可以为模块设置java9运行时,但每次重新加载gradle配置时它都会被覆盖。 而且,即使我以某种方式添加它,我需要指示module1到1)构建第二个和2)包含module1-java9 。 以下是这种情况的图纸: project-root settings.gradle build.gradle /module1 /module1-java9 (added java9 module) /module2 … 或者,这可以在src-java9下完成,具有不同的源: src和src-java9 。 但我怀疑这是否会被接受。 这是一张图: project-root settings.gradle build.gradle /module1 /src /src-java9 (added java9 source folder) /module2 […]

在JDK 11中是否有CORBA的替换库

JDK-11将删除JDK的许多旧部分( JEP-320 )。 对于其中一些(例如JAXB),function将作为常规库提供。 你只需添加另一个依赖项,一切正常。 但对于CORBA则不然,因为 使用Java中的CORBA开发现代应用程序没有太大的兴趣 然而,我仍然需要维护仍需要CORBA但仍想要更新到JDK-11的旧应用程序。 是否有替换库或另一种迁移到JDK-11的好方法而不删除这些应用程序的CORBAfunction?