jdeprscan工具确定列出所有不推荐使用和不存在的依赖项。它可以在类、目录和JAR上运行。
但是如何在耳朵上运行它呢?
发布于 2019-07-29 22:36:42
受https://stackoverflow.com/a/57217414/698168的启发,我使用以下脚本(Windows)将EAR分解为EAR:
rem remove previous run
rd /s /q ear
rem extract the EAR
"C:\Program Files\7-Zip\7z" x -oear *.ear
rem extract the WAR
cd ear
"C:\Program Files\7-Zip\7z" x -owar *.war
rem unify JAR from EAR and WAR
copy war\WEB-INF\lib\*.jar lib
rem make JAR with the classes
cd war\WEB-INF\classes
rem "C:\Program Files\7-Zip\7z" a -r my-app.jar
"C:\Program Files\Java\jdk-11\bin\jar" cvf my-app.jar -C . .
rem Note: using 7zip to create the JAR may lead to errors when running jdeprscan, thus we are using the jar command
copy my-app.jar ..\..\..
rem return to origin
cd ..\..\..
rem unpack all libraries...
cd lib
"C:\Program Files\7-Zip\7z" x -aoa -oclasses *.jar
rem .. and repack them as a fat JAR
cd classes
rem "C:\Program Files\7-Zip\7z" a -r 00lib.jar
"C:\Program Files\Java\jdk-11\bin\jar" cvf 00lib.jar -C . .
rem duplicate the fat JAR and make some cleaning
copy 00lib.jar ..\00lib.jar
copy 00lib.jar ..\01lib.jar
cd ..
rd /s /q classes
rem return to origin
cd ..\..请注意,此脚本不使用来自JEE Server的库(即,jdeprscan会将范围为"provided“的所有Maven库报告为error: cannot find class )。
然后,我使用以下命令生成一个jdeprscan报告:
"C:\Program Files\Java\jdk-11\bin\jdeprscan" --for-removal --verbose --class-path ear\lib\*.jar ear\my-app.jar > deprscan.log 2>&1然后,您可以检查jdeprscan.log文件。未找到的类可能不存在于最新的Java版本(例如11)中,或者可能存在于JEE模块中。缺少的类如下所示(Java11不再提供BASE64Encoder,但由ChecksumHelper使用):
Processing class oracle/spatial/security/ChecksumHelper...
error: cannot find class sun/misc/BASE64Encoder在最好的情况下,您可以在日志文件(例如Jar file my-lib-2.3.4.jar)中找到上面的JAR名称,否则您将需要根据类名确定库。
注意:所有这些都是为了将Java 8迁移到Java 11而设计的。
https://stackoverflow.com/questions/57256051
复制相似问题