java module解压及java常见打包格式
一、解包java9 modules文件
目前公司新上的一个项目的agent是用java写的,在做立项评审时需要检查其安全性。在拿到安装包后,检查执行命令和入口文件,发现一个modules,如下图所示:
因为之前所知的java打包方式有jar、jmod两种格式。其直接可以通过查看后缀名了解其类型,而且常见的jar也是直接可以通过winrar打开看到内部的class文件构成的。因为发现里面有libzip.so文件,尝试通过zip和rar解压,发现不成功。在查看agent安装里自提取的java版本发现其是java10,查看其中的模块名如下:
1[root@localhost bin]# ./java -version
2java version "10.0.2" 2018-07-17
3Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13)
4Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)
5[root@localhost bin]# ./java --list-modules
6java.base@10.0.2
7java.logging@10.0.2
8mymodule@1.0
虽然有了一些基本信息,但还是不得要领,找不到入口文件是如何打开的。实在想不出办法后,找java大牛朋友帮忙,在简单向其咨询后,其告知在java9以后的版本里,可以通过如下命令进行解包modules文件:
1jimage extract modules
二、java常见打包格式
java的打包格式有如下三种:
- JAR file format
- JMOD file format
- JIMAGE file format
1、jar格式
这种格式是最常见的格式,该格式是基于zip压缩,并改后缀为.jar格式,可以使用jar命令进行打包,如下:
1$ jar [OPTION...] [ [--release VERSION][-C dir] files] ...
2$ jar --create --verbose --file mydir/org.mymodule1
3-C org.mypackage1.jdk7/classes .
4--release 8 -C org.mypackage1.jdk8/classes .
5--release 9 -C org.mypackage1.jdk9/classes .
2、jmod格式
jmod格式也是基于zip压缩,其可以包含jar格式不能包含的类型文件,但其和jar格式的区别是,其不能被执行。英文原话是:This means this files contained in JMOD can be used only at compile-time or link-time, but not at runtime. ,其创建和解压都是可以通过jmod命令实现,如下:
1$ jmod (create|extract|list|describe|hash) <options> <jmod-file>
2$ jmod create --class-path services/org.app.services.jar jmods/org.app.services.jmod</jmod-file></options>
3、JIMAGE格式
该格式是在java9以后的版本中增加的格式,其是优化了jvm runtime的一种格式。其打包使用jlink命令,解包使用jimage 命令。jlink语法如下:
1jlink <options> --module-path <modulepath>
2 --add-modules <module>[,<module>...]</module></module></modulepath></options>
示例如下:
1$ jlink --module-path jmods;/home/java9_projects/dbapp/jmods
2--add-modules org.dbapp.model,org.dbapp.services,org.dbapp.view
3--launcher runapp=org.dbapp.view/Main
4--output dbapp
jimage命令如下:
1jimage <extract info="" list="" verify="">
2 <options> jimage...</options></extract>
Java9新特性也可以参看下csdn上的一篇文章《Java9新特性——module模块系统》
关于java下各种格式打包的详细介绍可以参看《How Modules Are Packaged in Java 9》
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/java-module/5808.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.