首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在JPMS中对动态创建的层做"--add-modules“?

在JPMS(Java Platform Module System)中,可以通过使用--add-modules选项来向模块路径中添加动态创建的模块。

动态创建的模块是指在运行时动态生成的模块,而不是在编译时就存在的模块。为了在JPMS中对动态创建的层做--add-modules,需要按照以下步骤进行操作:

  1. 创建一个基本的模块描述文件(module-info.java),该文件定义了模块的名称、依赖关系和导出的包等信息。例如,创建一个名为my.dynamic.module的模块,可以在src/main/java目录下创建一个module-info.java文件,并添加以下内容:
代码语言:txt
复制
module my.dynamic.module {
    // 模块的依赖关系
    requires some.other.module;
    
    // 导出的包
    exports com.example.package;
}
  1. 使用Java编译器(javac)编译模块描述文件和相关的源代码。在命令行中执行以下命令:
代码语言:txt
复制
javac -d <output_directory> <module-info.java> <source_files>

其中,<output_directory>是编译输出的目录,<module-info.java>是模块描述文件的路径,<source_files>是需要编译的源代码文件的路径。

  1. 使用Java链接器(jlink)创建一个自定义的运行时映像,该映像包含了动态创建的模块。在命令行中执行以下命令:
代码语言:txt
复制
jlink --module-path <module_path> --add-modules my.dynamic.module --output <output_directory>

其中,<module_path>是模块路径,包含了编译后的模块和其他依赖的模块,my.dynamic.module是动态创建的模块的名称,<output_directory>是输出目录,用于存放生成的运行时映像。

  1. 运行生成的运行时映像。在命令行中执行以下命令:
代码语言:txt
复制
java --module-path <output_directory> --module my.dynamic.module/com.example.package.MainClass

其中,<output_directory>是运行时映像的输出目录,my.dynamic.module是动态创建的模块的名称,com.example.package.MainClass是模块中的主类。

通过以上步骤,就可以在JPMS中对动态创建的层做--add-modules,实现动态模块的加载和运行。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云计算服务:https://cloud.tencent.com/product/cvm
  • 腾讯云数据库:https://cloud.tencent.com/product/cdb
  • 腾讯云服务器运维:https://cloud.tencent.com/product/cvm
  • 腾讯云音视频处理:https://cloud.tencent.com/product/mps
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发:https://cloud.tencent.com/product/mobdev
  • 腾讯云存储:https://cloud.tencent.com/product/cos
  • 腾讯云区块链:https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙:https://cloud.tencent.com/product/3d
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Excel小技巧41:在Word创建Excel表动态链接

例如,我们可以在Word中放置一个来自Excel表,并且可以随着Excel该表数据变化而动态更新。...这需要在Word创建一个Excel表动态链接,允许Word文档自动获取Excel表变化并更新数据。 例如下图1所示工作表,其中放置了一个Excel表,复制该表。 ?...图2 在弹出“选择性粘贴”对话框,选取“粘贴链接”并选择“形式”列表框“Microsoft Excel工作表对象”,如下图3所示。 ?...图5 Word文档表数据将相应更新,如下图6所示。 ? 图6 在Word文档和作为源数据Excel文件同时打开时,Word文档会自动捕获到Excel数据变化并更新。...图9 这样,每次要更新数据时,在表单击右键,在快捷菜单中选择“更新链接”即可,如下图10所示。 ? 图10 实际上,当创建单元格区域链接后,Word将会存储源数据字段信息,然后显示链接数据。

3.7K30

如何将JVM Docker镜像大小减少至少60%

这个问题根源 Java平台模块系统(JPMS)是随Java 9引入。我们可以使用 JPMS 创建适合特定应用程序自己自定义 JRE。...解决方案 除了模块化之外,Java 9还包含一个名为jlink工具。该工具主要目的是帮助我们根据需要创建自定义JRE。...首次在Java 8 jdeps引入,用于检查应用程序依赖关系。此外。还可以发现每个库依赖项使用每个Java模块。在运行命令之前,我们必须提取Jar文件才能使其正常运行。 unzip ....Slim JRE 问题以及如何修复它 从之前结果我们知道,精简JRE优于通用JRE。然而,Slim JRE又一个小缺陷。如果应用程序仍在开发,我们可能需要频繁更改Dockerfile。...Slim JRE,镜像尺寸极小,仅包含所需Java模块,可能需要频繁更新dockerfile,并且Docker可能无法跨项目复用

92730

Leyden 延迟了 OpenJDK AOT 编译器,转而优化 JIT 编译器

但是,从批准到 2022 年 5 月创建邮件列表两年时间里,没有看到该项目任何明显进展。这也就是该项目为何刚刚起步,现在主要关注是“概念,而不是代码”原因。...、原生编译和其他技术( JVM 检查点)目标感到最为兴奋。...但是,在容器和 Kubernetes 应用,常见实践是在标准 JVM 基础镜像上建立新,这已经比将所有的应用切换到 jlink 上带来了更多成本节省(因为每个人都会打包自己裁剪过 JVM)。...Caballero 还分享了 2020 年 7 月一段 YouTube 视频,视频 Micronaut 创始人 Graeme Rocher JPMS 进行了评论:Micronaut 支持 JPMS...Spring 计划在 2022 年底 6.0 版本中支持 JPMS,不过 Spring 生态系统可能还不会这样。而 Quarkus 目前没有计划加入 JPMS

83420

Spring Modulith使用模块和事件组织Spring Boot 3应用

这也就是为何在如下示例代码,来自 example.order.internal 包 SomethingOrderInternal 类所有其他类都是可见,而不仅仅局限于 example.order...Spring Modulith 使用了 Spring Framework 6 可观测性崭新支持,为模块 API 持续时间和事件处理自动创建 Micrometer span。...似乎 Spring Modulith 创造了一种新方式,为什么要这样呢? Drotbohm:它并不见得是创建一种新方式。...JPMS 为何没有满足你们模块要求呢? Drotbohm:JPMS 设计目标是模块化 JDK,在这方面它确实做得非常好。...我们正在考虑当前特性集进行类似的扩展,更高级可观测性功能,以捕捉每个模块业务相关指标,或可视化表述流经应用事件 - 命令流。

99210

【Java】A Guide to Java 9 Modularity

Java 9 在包上面引入了新层次,正式名称叫做 Java 平台模块系统(JPMS),或者更简单称之为“模块”。...一个模块是一组密切相关包和资源,以及一个新模块描述符文件。 怎么理解这个概念呢?实际上抽象理解为在 package 基础上再套了一包即可。...add-opens - 替换模块声明文件_open_条款。 add-modules - 将模块列表添加到默认模块集中。 list-modules - 打印所有模块列表和它们版本字符串 。...第一个模块很好,但是它没有任何事情。 We can create a second module that uses it now. 我们现在可以创建一个使用它第二个模块。...Conclusion 整个文章大致梳理了下面的内容: 讨论Java出现模块化概念。 JDK包含模块。 介绍模块声明文件,如何在实际项目使用。

17420

Java9来了,快来了解下JPMS基础吧!

然而,愿望是美好,项目目标并不总是能够得到满足。 什么是JPMS Module? JPMSJava库,语言和运行时更改。...不再需要把一个包命名为“impl”或“internal”,然后Javadoc声明“请不要使用此包类型”。不幸是,生活不会那么简单。 但创建模块相对简单。...OSGi和JBoss模块在没有JVM直接支持下而存在,但依然为模块提供一些额外支持。它是通过在其自己类加载器启动每个模块来实现,这样是可以,但也有自己问题。...请注意,将版本号放在模块名称是一个坏主意,它不能解决这个问题并创建其他。 两个模块可能不包含相同包。这似乎是非常明智,直到你认为它也适用于隐藏包。...以上只是module-info.java文件可能内容和JPMS限制总结。如果你正在考虑模块化您lib或应用程序,请等一会儿,直到所有内容变得更清晰再说吧!

2.7K80

一文读懂jar包小秘密

jar包到底是什么 jar包其实是一种zip格式文件,所以说你实际上是可以使用zip相关命令来jar包进行创建或者解压缩操作。 不同是jar包多了一个META-INF文件夹。...通过这个文件夹,jar包可以执行更多操作。 JDK也自带了一个jar命令,通过jar命令我们可以实现创建,更新jar包操作,下图是JDK8jar命令说明: ?...比如下面命令创建了多个版本发行jar包,并且将一些文件放在 META-INF/versions/9 目录。...关于JPMS更多信息可以参考我之前写文章:JDK9新特性:JPMS模块化. versions versions主要和 multi-release JAR一起使用: Multi-Release:...x-Digest-Manifest:表示是整个manifest摘要。 这两个属性主要用来验证签名用

1K41

在java中使用SPI创建可扩展应用程序

简介 什么是可扩展应用程序呢?可扩展意思是不需要修改原始代码,就可以扩展应用程序功能。我们将应用程序做成插件或者模块。 这样可以在不修改原应用基础上,系统功能进行升级或者定制化。...为了更好展示扩展应用实际使用,我们分别创建4个模块。在实际应用,只需要将这些jar包加入应用程序classpath即可。...SPI在JPMS模块化系统下实现 上面我们讲的是基本操作,考虑一下,如果是在JDK9之后,引入了JPMS模块化系统之后,应该怎么使用SPI呢? 代码肯定是一样,我们需要修改是SPI配置文件。...如果在JPMS,我们就不需要使用META-INF/services了,我们只需要创建相应module-info.java文件即可。...总结 本文介绍了SPI在模块化和非模块化系统应用。

1.5K41

JDK 11 版本时间表公布

到目前为止,包含在 JDK 11 JEP 有: JEP-309:动态类文件常量 JEP-318:Epsilon:一款低开销垃圾收集器 JEP-320:移除 Java EE 和 CORBA 模块...JEP-320:移除 Java EE 和 CORBA 模块 Java SE 9 重组包括 Java EE 和 CORBA 模块支持,但根据 JEP-277,它们立即遭到弃用,并在未来版本移除掉。...,因为它们已在过去 12 年中得到很好发展,并且可以在第三方站点( Maven Central)随时获得。...移除 Java EE 模块另一个风险是,如果已使用–add-modules java.se.ee、add-modules java.xml.bind 等命令行标志,那么已经从 JDK 6、7 或 8... Fernández 推文有一些有趣回应,包括: “Kotlin?” “2020 年将会发生什么?Java 命中注定!没有它,我就无法过好我生活!

1K10

理解JanusPlugin

JanusPlugin是其非常重要一部分内容,今天我们就来这块内容一下分析,看看Janus是如何实现Plugin,以及它工作原理是怎样。...核心主要用于资源分配(线程启动与分配)、底层事件处理、各种WebRTC协议实现及处理等;插件用于业务处理,各种传输类型命令处理等。...* symbol: 指向动态符号,函数,变量等 * return: 返回在内存符号地址 */ void* dlsym(void* handle, const char* symbol...下面我们来看看Janus 是如何动态加载库吧。 为了方便Janus专门创建了一个目录用于存放插件。在Janus启动时它会遍历该目录,并将目录插件一个个动态加载到内存。...当然,我们这里只是Janus 插件和其要实现函数做了一个大体讲解,很多细节这里并没有讲到,我会在后面的文档更详细介绍 。

1.4K10

java9迁移注意事项

迁移种类 1、代码不模块化,先迁移到jdk9上,好利用jdk9api 2、代码同时也模块化迁移 几点注意事项 不可读类 比如sun.security.x509,在java9归到java.base模块...没有模块化jar在classpath会被归到unnamed modules;在module-path则会被自动创建为automatic modules(一个automatic modules会声明transitive...通过在module-path去动态添加实现模块实现解耦。 模块版本管理 module-info.java不支持声明版本号,但是创建jar包时候,可以通过—module-version设置。...jdeps分析不出来,需要自己手工requires,如果dependency是optional,可以requires static 模块单元测试可读性问题 如果单元测试时单独模块的话,可以在运行时通过...—add-exports或—add-opens来授予单元测试模块目标模块可读性及反射能力。

1.4K10

一张PDF了解JDK9 GC调优秘籍-附PDF下载

然后就是引入Xlog日志服务,通过Xlog日志服务我们可以监控JVM事件,比如:GC,class loading,JPMS,heap,thread等等。...下面是AppCDS大概工作流程: 选择要归档class,并创建一个class列表,用在归档。...JVM是java程序运行基础,JVM各种事件比如:GC,class loading,JPMS,heap,thread等等其实都可以有日志来记录。...通过这些日志,我们可以监控JVM事件,并可以依次来java应用程序进行调优。 在JDK9引入Xlog日志服务就是为这个目的而创建。...在JDK9之后,之前Print*参数都被Xlog所代替了。 我们看下常用Xlog和GC日志参数: ? JDK9G1参数 作为JDK9默认垃圾回收器G1,G1调优是必不可少

45220

深入理解JVM(③)Java模块化

前言 JDK9引入Java模块化系统(Java Platform Module System ,JPMS)是 Java技术一次重要升级,除了像之前JAR包那样充当代码容器之外,还包括: 依赖其他模块列表...然后在每个module顶层目录创建module-info.java ? 在ExampleOne创建两个不同package下类,ExampleFirst和ExampleOne。...模块在模块路径访问规则:模块路径下具名模块(Named Module)只能访问到她依赖定义列明依赖模块和包,匿名模块里所有的内容具名模块来说都是不可见,即具名模块看不见传统JAR包内容。...模块化下类加载器 JDK9为了保证兼容性,依然保持了三类加载器架构以及双亲委派模型。但是为了模块化系统顺利实施,还是类加载器做了一些改动。...最后,JDK9虽然仍然维持着三类加载器和双亲委派架构,但类加载委派关系也发生了变动。

1.1K30

Salesforce 如何用一年时间大规模迁移到 OpenJDK 11

从 OpenJDK 9 升级到 OpenJDK 10,再从 OpenJDK 10 升级到 OpenJDK 11,都只需相对较小改动。...此功能被称为自动模块化,创建它是为了减轻将现有应用程序转换为新模块系统负担。...相反,Java EE 和 CORBA 技术独立版本作为 Maven 构件发布,并可以从第三方网站( Maven Central)上获取,我们从那里下载了它们并将它们添加到了 Salesforce 应用程序模块路径...根据 JPMS 规范,自动模块应该导出其所有的包——显然在我们例子不会发生这种情况! 事实证明,我们在 OSGi 框架包解析逻辑中发现了一个 bug(违反了 JPMS 规范)。...客户端、 try-with-resources 语句改进、允许在接口中使用私有方法、Optional 和 Collectors 类新方法、 CompletableFuture 改进、用于局部变量类型推断

72920

【Java】已解决java.lang.IllegalAccessException异常

这种非法访问可能由于多种原因引起,反射操作时权限问题、访问私有成员未正确使用访问器等。以下将针对这个异常进行详细分析和解决。...二、可能出错原因 访问了一个类私有成员,但没有使用正确反射机制。 尝试访问一个类成员,但当前类没有足够权限(非同一个包或没有继承关系)。...使用了安全管理器(SecurityManager),并且没有给予足够权限。 使用了Java模块化系统(Java 9及以上版本JPMS),并且模块之间没有正确导出和读取权限。...五、注意事项 使用反射时要小心:反射是一种强大工具,但也可能带来安全风险。确保在访问私有成员时,你了解这样后果,并仅在必要时使用。...这意味着一个类方法可以访问同一类定义所有成员,无论其访问修饰符是什么。

22610

注册JNI函数两种方式

前言 前面介绍过如何实现在Android Studio制作我们自己so库,相信大家看过之后基本清楚如何在Android studio创建JNI函数并最终编译成不同cpu架构so库,但那篇文章介绍注册...动态注册 我们知道Java Native函数和JNI函数时一一,JNI中就有一个叫JNINativeMethod结构体来保存这个对应关系,实现动态注册方就需要用到这个结构体。...Javanative方法名字,本文hello;Java函数签名信息、JNI对应函数函数指针。...以上就是动态注册JNI函数方法,上面只是一个简单例子,如果你还想再实现一个native方法,只需要在JNINativeMethod数组添加一个元素,然后实现对应JNI函数即可,下次我们加载动态库时就会动态将你声明方法注册到...JNI环境,而不需要你其他任何操作。

1.2K20
领券