瘦身JRE 我们可以使用jdeps命令来确定所需的模块。首次在Java 8 jdeps中引入,用于检查应用程序中的依赖关系。此外。还可以发现每个库依赖项使用的每个Java模块。 /greetings/build/libs/greetings.jar -d temp jdeps \ --print-module-deps \ --ignore-missing-deps 注意:jdeps将无法打印Reflection. 例如,如果应用程序包含spring security,我们需要手动添加jdk.crypto.ec和jdk.crypto.cryptoki模块 现在我们将替换ALL-MODULE-PATH为 打印的列表jdeps /greetings/build/libs/greetings.jar /app/ RUN unzip /app/greetings.jar -d temp && \ jdeps \
jdeps,一个 Java 类依赖关系分析器。与 --jdk-internals 选项一起使用时,jdeps 会告诉你哪个类依赖于哪个内部 API。 工具 Gradle 插件 Maven 插件 jdeps jdeps-gradle-plugin Apache Maven JDeps 插件 jdeprscan jdeprscan-gradle-plugin 从 jdeprscan 和 jdeps 获取的警告和错误来自编译器。使用 jdeprscan 和 jdeps 的优点是,可以在现有的 jar 和类文件(包括第三方库)上运行这两个工具。 使用 jdeps 可以使用 jdeps 通过 --jdk-internals 选项来查找 JDK 内部 API 上的依赖项。 除了查看发行说明以外,还可以使用 jdeps 和 jdeprscan 来评估 jar 文件。
我们可以使用 JDK 附带的 jdeps 工具。jdeps 是一个可以分析 jar 文件依赖关系并生成所需模块列表的工具。 为此,我们可以在项目根目录下运行以下命令:jdeps --ignore-missing-deps -q \ --recursive \ --multi-release 17 \ 这很好,但我们能否自动化这个过程,而不是手动运行 jdeps 命令然后将模块复制到 jlink 命令中? -f Dockerfile.jlink-with-jdeps.temurin . 结论通过本文的探讨,我们成功展示了如何利用 jlink 工具和 jdeps 工具来生成更加精简的 Java 镜像。
反射原因引起,由于旧系统没有module-info,因此在java命名添加参数加以修改 --add-opens java.base/java.lang=ALL-UNNAMED 确定依赖的模块 通过IDE或者jdeps 分析 jdeps --class-path 'classes/lib/*' -recursive -summary app.jar jdeps只是静态代码分析,如果有使用反射用的类jdeps分析不出来,
类依赖分析器jdeps Jdeps是一个功能强大的命令行工具,它可以帮我们显示出包层级或者类层级java类文件的依赖关系。 它接受class文件、目录、jar文件作为输入,默认情况下,jdeps会输出到控制台。 作为例子,让我们看看现在很流行的Spring框架的库的依赖关系报告。 为了让报告短一些,我们只分析一个jar: org.springframework.core-3.0.5.RELEASE.jar. jdeps org.springframework.core-3.0.5
解决方案:使用 jdeps 工具分析依赖项,升级到兼容的版本。 jdeps -jdkinternals myproject.jar 语言特性使用限制 问题:代码中广泛使用旧语言特性,新语言特性难以快速替换。
jdeps命令:改进了依赖分析,识别不必要的模块依赖。 跨团队协作优势: 团队间模块划分明确,减少代码冲突与重构风险。 A:从定义核心模块开始,将非核心功能逐步拆分为独立模块,使用jdeps分析依赖关系。
新工具− 新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。
新工具 − 新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。
demo \ -e PROFILE=default \ springboot2-java9-demo 确定所依赖的jmod 这个目前来说还没找到现成命令/工具可以动态找出工程依赖的jmod.不过可以自己通过jdeps </executions> </plugin> 这里通过copy-dependencies插件把依赖jar存放到classes/lib目录下,然后使用jdeps 指定这个class-path来分析app.jar(这样做的目的主要是springboot打包出来的是fatjar,相关jar都在fatjar中,不好指定class-path) jdeps recursive summary ➜ target git:(master) ✗ jdeps --class-path 'classes/lib/*' -recursive -summary app.jar 拆分程序包 jar包,但迁移到java9毕竟是最好的 maven相关的plugin比如jlink,jmod目前还只是pre-release,还没有正式发布 jdk9的周边设施还有待进一步完善 doc jlink jdeps
javac javadoc javafxpackager javah javap javapackager java-rmi.cgi javaws jcmd jconsole jcontrol jdb jdeps
FROM eclipse-temurin:17-jre-alpine WORKDIR /app COPY --from=builder /app/target/*.jar app.jar # 使用jdeps 分析并创建最小JRE运行时 RUN apk add --no-cache binutils RUN jlink \ --add-modules $(jdeps --print-module-deps
新工具− 新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。
java.xml.ws.annotation* jdk.zipfs application classloader加载-cp,-mp指定的类 jdk.aot jdk.jdeps
jps jstat jvisualvm jarsigner javac javafxpackager javap java-rmi.cgi jcmd jcontrol jdeps
新工具:新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。
schemagen.exe* jarsigner.exe* jdb.exe* jvisualvm.exe* serialver.exe* java.exe* jdeps.exe
新工具:新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。
schemagen.exe* jarsigner.exe* jdb.exe* jvisualvm.exe* serialver.exe* java.exe* jdeps.exe
jdk.jartool.jmod ├── jdk.javadoc.jmod ├── jdk.javaws.jmod ├── jdk.jcmd.jmod ├── jdk.jconsole.jmod ├── jdk.jdeps.jmod