【问题标题】:How do I find the packages defined in a jar?如何找到 jar 中定义的包?
【发布时间】:2011-06-12 06:52:21
【问题描述】:

我有一堆 JAR 文件(来自 maven2 项目)并且 maven 报告找不到某些包(确切地说是 org.openanzo.client.jena)。我想深入研究由于 maven 依赖解析而下载的 JAR 文件,并找到这些 JAR 文件中可用的包。见解?

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

【问题讨论】:

  • “maven 报告找不到某些包”是什么意思?您要运行什么命令?讯息是什么?有没有提供其他信息。通常这样的错误不会在没有上下文的情况下出现。
  • @Zac:你是对的。正是我对 maven 的不熟悉使我相信问题是缺少 jar。我顺便解决了。 Tnx 供您考虑。

标签: jar maven package


【解决方案1】:

jar tvf filename.jar 将向您显示 jar 文件的内容,而无需您提取它。

但我认为,也许您真正想做的是为您缺少的依赖项找到正确的坐标,因为显然您现在拥有的没有一个提供您正在寻找的包(换句话说,检查它们的内容可能对您没有帮助)。

我承认我建议检查的第一个地方是 Sonatype 的public Nexus instance。不过,搜索your example 什么也没找到。通常这意味着该项目不会尝试将他们的东西放入 Maven Central 或其他主要存储库(这没关系),因此您必须求助于网络搜索。通常,包的前两个部分会告诉您在哪里查找(在您的情况下为 openanzo.org)。

【讨论】:

    【解决方案2】:

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

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

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

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

      # jar xvf filename.jar
    

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

    【讨论】:

    • 如果你在 Windows 上,你可以使用 cygwin 和 linux grep :)
    【解决方案3】:

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

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

    按照carsten的建议...将jar文件设置为lib文件并手动查找

    创建一个名为 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”.. 它是硬编码的,您也可以作为参数传递...

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

    希望这会有所帮助:-)

    【讨论】:

      【解决方案4】:

      .jar文件就是ZIP压缩包,重命名为zip,用你喜欢的解压程序打开,遍历目录。

      如果将jar文件添加到eclipse项目中,则可以在项目资源管理器中遍历lib。

      HTH

      【讨论】:

        【解决方案5】:

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

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

        如果您使用 Intellij IDEA,每个项目都包含一个名为 External Library 的树,可让您搜索和探索您的库。

        【讨论】:

          猜你喜欢
          • 2011-03-30
          • 2021-08-21
          • 1970-01-01
          • 2015-05-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-07
          相关资源
          最近更新 更多