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

使用jlink为外部JAR生成module-info

jlink是Java 9引入的一个工具,用于创建自定义的Java运行时映像。它可以将Java模块和依赖的外部JAR打包成一个可执行的、独立的Java运行时环境。

对于外部JAR,如果想要将其包含在生成的运行时映像中,并且能够使用Java模块系统的功能,需要为这些JAR生成module-info文件。module-info文件是Java 9引入的模块化系统的一部分,它描述了一个模块的依赖关系和对外提供的接口。

下面是使用jlink为外部JAR生成module-info的步骤:

  1. 确保已经安装了Java 9或更高版本的JDK,并且jlink工具可用。
  2. 创建一个空的目录,用于存放生成的module-info文件和外部JAR。
  3. 将外部JAR复制到该目录中。
  4. 打开命令行终端,进入该目录。
  5. 运行以下命令,生成module-info文件:
  6. 运行以下命令,生成module-info文件:
  7. 这个命令会分析JAR文件的依赖关系,并生成一个module-info.java文件。
  8. 使用文本编辑器打开生成的module-info.java文件,检查并修改其中的模块名称、依赖关系等信息,确保其正确性。
  9. 编译module-info.java文件,生成module-info.class文件:
  10. 编译module-info.java文件,生成module-info.class文件:
  11. 使用jlink命令创建自定义的Java运行时映像:
  12. 使用jlink命令创建自定义的Java运行时映像:
  13. 其中,模块路径是包含生成的module-info.class文件的目录,模块名称是外部JAR的模块名称,输出目录是生成的运行时映像的存放位置。
  14. 例如,如果外部JAR的模块名称是"com.example.module",生成的module-info.class文件在当前目录下,输出目录为"myruntime",则命令如下:
  15. 例如,如果外部JAR的模块名称是"com.example.module",生成的module-info.class文件在当前目录下,输出目录为"myruntime",则命令如下:
  16. 等待jlink工具完成运行时映像的创建。

生成的运行时映像可以独立运行,不需要安装Java运行时环境。可以通过以下命令运行:

代码语言:txt
复制
<path-to-runtime>/bin/java -m <模块名称>/<主类名>

其中,<path-to-runtime>是运行时映像的路径,<模块名称>是外部JAR的模块名称,<主类名>是要执行的主类。

使用jlink为外部JAR生成module-info的优势是可以将外部JAR包含在自定义的Java运行时映像中,使得应用程序更加独立和便携。同时,使用模块化系统可以更好地管理和控制应用程序的依赖关系,提高应用程序的可维护性和可扩展性。

这个技术可以在各种场景中使用,特别是在需要将应用程序打包成独立的可执行文件,并且不依赖于外部Java运行时环境的情况下。例如,可以将应用程序部署到云服务器、容器环境或者移动设备上。

腾讯云提供了一系列与云计算相关的产品和服务,包括云服务器、云数据库、云存储等。具体推荐的产品和产品介绍链接地址可以根据具体需求和场景进行选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • SpringBoot使用Maven打包异常-引入外部jar

    SpringBoot使用Maven打包异常-引入外部jar 由于项目需要,在需要打包的时候,由于引入的外部jar在本地是可以使用的,但是当打包后启动时报错,找不到对应的类。...使用 1、引入外部jar包 项目中建立文件夹lib 可以在resultces包下建立一个lib文件夹,将jar包扔进去: ?...SpringBoot使用Maven打包异常-引入外部jar 在配置文件中引用 com.xx.xxx //组织,随便命名...artifactId> //包的名字,随便命名 1.1.2 //版本,随便命名 system //scopesystem...目录的lib文件夹下,也可以放在跟目标,路径按需修改 2、项目打包 遇到问题 是由于项目打包时,不识别外部jar,又没有进行配置,继而导致出现问题。

    1.4K20

    一个Java9特性导致的编译失败 | 疑难杂症

    dexBuilderRelease 报错了,报错内容类信息异常。 开了了代码混淆,所以导致要根据mapping文件追述混淆前的类。...module-info的描述上来看,这并不是一个一定需要的东西,他是一个对外部输出的描述信息,告诉你当前jar的一些模块化信息而已,所以如果使用低版本来进行编译,特别是安卓这种,就必然会出现这个奇怪的问题...我对module-info.class的类进行过滤,因为前文介绍过着是java9模块化使用的,也就是说在低版本上有没有这个类,其实完全没有用,他并不会实际被使用到。...entryName.contains("META-INF")) { Log.info("jar file module-info:$entryName jarFileName...扫描逻辑,当前的操作比较简单,如果发现文件名是module-info,则在生成新的jar的时候对这个文件进行跳过操作,就这么点。

    1.2K20

    使用Intellij Idea打包java可执行jar

    自己在实际工作中的需要,使用Idea打包项目可执行的jar包,网上找了好多文章但总是不成功,多次尝试后终于跑通,所以记录下来,希望可以帮助各位 步骤: 1..../how-to-run-a-jar-file-created-using-intellij-12),配置完成后如下图所示,点击OK进入下一步。...我个人建议选择“extract to the target JAR”,这样所有依赖的jar包都会放在生成jar包中。 5....完成后,点击OK,Apply等按钮,回到IDEA的主菜单,选择“Build – Build Artifacts”下的“Build”或者“Rebuild”即可生成最终的可运行的jar,在D:\Intellij...\SeriesPublish\out\artifacts\SeriesPublish_jar下面找到生成的目标jar,可以看到META-INF/MAINFEST.MF文件被正确包含,内容也正确。

    1.3K10

    Linux驱动开发-外部中断的注册使用(按键例)

    外部中断介绍 前面有篇文章使用杂项设备完成了按键驱动的编写,实现了按键轮询检测,通过read函数向应用层传递按键值,这篇文章使用按键例,介绍Linux内核里中断的注册方法,使用中断的方式检测按键是否按下...,中断在单片机、设备驱动开发里使用的都非常多,可以更加实时的检测到按键触发的情况。...对于有惟一入口的中断,可以传递 NULL; 但是一般来说都会传递一个有意义指针,在中断程序中使用, 以方便编程。...注意:在中断服务程序中不能使用 disable_irq 这个函数,否则内核崩溃,可以使用 disable_irq_nosync。...外部中断驱动编写 2.1 按键原理图 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ElkgCQ6V-1648429520818)(https://gitee.com/dsxiaolong

    4.9K40

    使用 code-generator CustomResources 生成代码

    目前 kubernetes 中的用户分为内部用户和外部用户,内部用户指在 kubernetes 集群中的 pod 要访问 apiserver 时所使用的,也就是 serviceaccounts,内部用户需要在...外部用户指 kubectl 以及一些客户端工具访问 apiserver 时所需要认证的用户,此类用户嵌入在客户端的证书中。...apiserver CA 证书链:主要用于 kubernetes 内部组件互相访问以及外部客户端访问 apiserver 使用 etcd CA 证书链:主要用于 etcd 节点之间的访问以及 apiserver...CN(Common Name) 以及 O(Organization) 字段对应 kubernetes 中的 user 和 group,即 RBAC 中的 subject,而 kubernetes 也多个组件内置了...kubectl get clusterrole $ kubectl get clusterrolebinding 下面是 kubernetes 中核心组件内置的 user 和 group,在为每个组件生成证书时需要在其

    1K20

    使用神经网络图像生成标题

    神经网络在计算机视觉和自然语言生成方面的应用已经非常引人注目。 本文将介绍神经网络的一个这样的应用,并让读者了解如何使用CNNs和RNNs (LSTM)的混合网络实际图像生成标题(描述)。...图像特征提取器 为了从图像中生成特征,我们将使用卷积神经网络,只需稍加修改。让我们来看看一个用于图像识别的卷积神经网络。 ?...Keys())[0]].shape (18432,) 接下来,我们将开发用于图像生成标题的LSTM网络(RNN)。 用于生成标题的LSTM 文本生成是LSTM网络中最流行的应用之一。...LSTM单元格(LSTM网络的基本构建块)能够根据前一层的输出生成输出,即它保留前一层(内存)的输出,并使用该内存生成(预测)序列中的下一个输出。...我们将使用Spacy内建的“en_core_web_lg”模型来创建令牌的向量表示(即每个令牌将被表示(300,)numpy数组)。

    1K20

    Jpackage-制作无需预装Java环境的Jar可执行程序

    这篇文章我们会先学习如何将 Java 程序打包成一个可执行的 Java JAR 文件。然后演示如何使用这个 JAR 文件生成 Windows、Linux、MacOS 上的可执行程序。...它基于广泛使用的 ZIP 文件格式,因此 jar 文件可以使用 ZIP解压缩工具解压。...jpackage 命令 jpackage 命令是从 Java 14 开始提供的,可以帮助我们模块化或非模块化 Java 应用程序生成指定系统平台的可执行程序,而不用预先安装 JRE 环境。...myJar.jar 要为 jlink 提供您自己的选项,请单独运行 jlinkjlink --output appRuntimeImage -p modulePath...--name hello --main-jar hello.jar 我所在 Linux 系统 Ubuntu22 ,所以生成安装包 hello_1.0_amd64.deb 。

    54110

    使用 paka.dev npm 包生成文档

    ##  起因在编写我个人的前端工具库的时候,想要为项目生成一个 API 文档,因为项目使用的是 TypeScript ,自然就想到使用 TypeDOC 项目来生成一个文档,经过一番学习,发现 TypeDOC...生成的 API 文档随便可以使用各种主题插件,但是还是有点不好看,然后就一直没有做这件事。...,就是一个 API 文档,而且非常好看,大概的样子就是下面这样(这里我就替换成我自己的工具库的 API 文档的图片啦)图片查看URL就可以知道,这里应该是通过引用 npmjs 和 github 共同来生成的...,规则大概是这样https://paka.dev/npm/[发包到npm上的包名]@[版本号]将上面的 URL 替换成自己的,然后复制到浏览器直接访问即可看到自己的工具库的 API 文档最后也欢迎大家使用我的工具函数库

    50640

    jar】JDK将单个的java文件打包jar包,并引用到项目中使用【MD5加密】

    】   1.对于封装的jar中非提供给外界使用的方法,尽量将其设置private   2.对于工具类中经常要使用的方法,可以设定为static,这样在使用过程中不用new一个对象再去引用,可以直接使用类名调用...===================================================================== 有这么一个需求,想要将一个MD5加密的java文件功能类打包Jar...【问题:如果javac命令提示不是内部或外部命令,解决方法:https://www.cnblogs.com/sxdcgaq8080/p/11765252.html】 3.接下来就可以使用jar -cvf...3》查看打包出来的jar包以及层级结构 ? ? 4.现在打包jar包成功了,怎么使用到项目中呢?   ...5>好了,现在在pom.xml文件中引用,在项目中使用jar包     pom.xml文件引入 <!

    2K20

    深度解析Java 9核心新特性

    多版本兼容 JAR(JEP 238) Java 9引入了多版本兼容JAR文件的概念,这允许开发者在单个JAR文件中包含针对不同Java版本的类和资源。...这使得库和框架的维护者能够更容易地支持多个Java版本,而无需不同版本创建和维护单独的JAR文件。 多版本兼容JAR允许在单个JAR中包含针对不同Java版本的类文件。...通过指定所需的模块和依赖关系,jlink可以生成一个包含最小运行时环境的映像,这有助于减小应用程序的部署大小并提高其启动速度。这对于构建微服务、容器化应用程序或嵌入式系统特别有用。...jlink主要通过命令行使用,用于创建一个自定义的Java运行时映像: jlink --module-path /path/to/jmods --add-modules java.se --output...从模块化系统到HTTP/2客户端API,再到改进的Stream API和jlink工具,Java 9开发者提供了更多的选择和可能性,以构建高效、可靠且易于维护的软件系统。

    16500

    Java9新特性——module模块系统

    项目官网:http://openjdk.java.net/projects/jigsaw/ 为什么要使用模块化 java开发者都知道,使用java开发应用程序都会遇到一个问题,Jar hell,他就像windows...jar中的资源可以任意使用;而module中的资源只有导出的才可以使用。 module仍然以jar载体。...物理层面上,module在一定意义上可以理解jar中的一个module-info.class。...不过这并不是说module完全没有意义,就像class文件中的成员设置私有,不允许外部访问,你完全可以通过反射去访问它,一个道理。...模块的应用场景 首先,最突出的用法,就是使用jlink打包自定义的镜像,分发到小计算单元中运行,如docker,嵌入式设备。 其次,将来必定会有越来越多的容器来支持直接运行模块。

    3.1K20
    领券