如何找到jar中定义的包?

时间:2011-01-20 07:35:36

标签: jar maven package

我有一堆JAR文件(来自maven2项目)和maven报告无法找到一些包(确切地说是org.openanzo.client.jena)。我想深入研究作为maven依赖解析结果下载的JAR文件,并找到这些JAR文件可用的包。见解?

更新:显然,检查jar文件内部的唯一好方法是“jar”实用程序,或者可以使用其IDE的工具来执行此操作。

5 个答案:

答案 0 :(得分:13)

jar tvf filename.jar将向您显示jar文件的内容,而无需您将其解压缩。

但是我想也许你真正要做的就是为你所缺少的依赖找到合适的坐标,因为很明显你现在没有提供你正在寻找的包(换句话说) ,检查他们的内容不太可能帮助你。)

我承认,我建议检查的第一个地方是Sonatype的public Nexus instance。但是,搜索your example没有任何结果。通常这意味着项目不是试图将他们的东西放到Maven Central或其他主要的存储库中(这没关系),所以你不得不求助于网络搜索。通常,包的前两部分会告诉您在哪里查看(在您的情况下为openanzo.org)。

答案 1 :(得分:10)

如果您使用的是Linux或Mac,则可以转到包含JAR的文件夹根目录下的终端并输入:

   # grep -ri "org.openanzo.client.jena" *

它将返回包含该包名称的所有JAR文件的递归列表。如果它返回0结果,则那些JARS都不包含该包。

如果您想进行更详尽的搜索,可以解析JAR文件。目录结构和.class文件将按文件夹中的包进行组织。

  # jar xvf filename.jar

如果您使用的是Windows,则可以使用7Zip等工具取消JAR文件。

答案 2 :(得分:2)

@Carsten 您不必将.jar文件重命名为.zip。您可以直接在winzip /或其他zip实用程序中打开jar文件(假设是Windows操作系统)

@ ashy_32bit 尝试使用IBM的“jar class finder”eclipse插件。用于查找类的简单插件(如果您知道类名)

OR

正如carsten建议的那样......将jar文件设置为lib文件并手动查找

OR

创建一个名为a.bat的批处理文件(您将所有jar文件直接放在一个文件夹下)并粘贴以下4行

@ECHO OFF
dir /b *.jar > allJarFilesList.txt
FOR /F %%A IN (allJarFilesList.txt) DO jar -tf %%A > list_of_packages.txt
FOR %%B IN (list_of_packages.txt) DO FIND /I "com/sun" %%B

注意最后一行中的“com / sun”..它是硬编码的,你也可以作为参数传递...

我知道这是非常基本的形式,并且可以像查找各种子目录一样“改进”。

希望这会有所帮助: - )

答案 3 :(得分:1)

.jar文件只是ZIP压缩存档,将其重命名为zip,使用您最喜欢的解压缩程序打开它,然后遍历目录。

如果将jar文件添加到eclipse项目中,则可以遍历项目浏览器中的lib。

HTH

答案 4 :(得分:0)

假设maven下载了jar文件,文件将被加载到本地存储库中。 您可以使用随Eclipse打包的maven浏览器来浏览和搜索存储库中的工件。(通常在userdir / .m2 / repository中)

注意:如果需要,您可以直接浏览您的存储库。您将了解下载的软件包。但我建议使用插件。

如果您使用的是Intellij IDEA,则每个项目都包含一个名为External Library的树,允许您搜索和浏览库。