0

jdeps在目录上使用它时如何工作?

我基本上正在使用一个结构复杂的 tomcat webapp,在多个位置有许多 jars 和类,我想用jlink.

该目录是一个经典的 tomcat 结构,其中包含多个位置的 jar 和类:

> tree -L 1 /usr/local/tomcat/                                                                                                                  
├── LICENSE
├── NOTICE
├── RELEASE-NOTES
├── bin
├── conf
├── db.sh
├── favicon.ico
├── lib
├── logs
├── run
├── save.sh
├── start.sh
├── stop.sh
├── temp
├── webapps
└── work

> find . -name "*.jar" -o -name "*.class" | wc -l                                                                                             
     938

我一直在尝试以多种方式使用 jdeps,但文档并不是很有帮助。下面是返回的东西看起来像我所期望的唯一命令:

> jdeps --recursive --print-module-deps /usr/local/tomcat/
java.base,java.compiler,java.desktop,java.management,java.naming,java.scripting,java.sql

这种工作按预期工作,但似乎只考虑了类。没有--print-module-deps我得到一大堆像这样的未知依赖项

com.my.app -> org.eclipse.jgit.diff  not found

即使依赖项已正确安装在/usr/local/tomcat/webapps/ROOT/WEB-INF/lib/org.eclipse.jgit-5.10.0.202012080955-r.jar.

一个明显的结果是,有很多未列出的所需模块,当使用自定义 JRE 执行应用程序时,由于缺少 java 模块而出现错误。澄清一下,如果我包含所有模块,jlink --add-modules ALL-MODULE-PATH一切运行顺利。

编辑

我已经在每个 jar 上测试了运行 jdeps 以添加缺少的模块,即使使用更直接/更有效的方法jdeps会更好。

find . -name "*.jar" -o -name "*.class" | xargs jdeps --print-module-deps --ignore-missing-deps似乎在这个基本用例上起到了作用,但是当应用于更大的 tomcat 项目时,仍然存在运行时异常,所以我认为这使它ignore-missing-deps毫无意义。

在此处输入图像描述

4

0 回答 0