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
毫无意义。