目录
引用其他同学的 Jar 包时,需要获取其对应 jar 包内的 pom.xml 文件检查版本依赖关系,下面介绍两种直接读取 jar 包获取文件的方法。
想要获取 jar 内的 pom.xml 文件,需要先确认是否存在该 xml,使用 jar tf xx.jar 命令查看 jar 内全部文件:
jar tf your-artifact.jar | grep pom.xml
通过 grep pom.xml 会得到多个项目内的 pom.xml,我们根据?artifactId 找到自己项目的 pom.xml 然后执行下述命令:
jar xf your-artifact.jar META-INF/maven/<groupId>/<artifactId>/pom.xml
这里 <groupId> 与 <artifactId> 根据上面 grep 得到的内容填写即可,无需指定版本,要是有多个版本可能就要 NoSuchMethod 了。执行后在当前目录会生成 META-INF 的文件夹,向下一层一层检索即可得到对应的 pom.xml 文件了。
除了 pom.xml 外,jar 包内的文件其实都可以导出,只要按照 xf 得到的内容路径替换上面的命令即可,不过这里不能得到原生的 .java 和 .scala 文件,只可以获得编译后的 .class。
unzip your-artifact.jar org/ahocorasick/trie/PayloadTrie$1.class
执行命令后在当前文件夹可以得到 org/... 的嵌套文件夹,打开即可获取 jar 包内文件。?
这个方法主要适用于别人提供给你 Jar 包,当时也有一些 Jar 包解析的工具和 App,如果想显式操作直接应用即可,例如 GD-GUI。对于得到的 .class 文件,也可以反编译获取内部的一些代码。