【问题标题】:Java: How do I know which jar file to use given a class name?Java:给定类名,我如何知道使用哪个 jar 文件?
【发布时间】:2010-09-21 11:12:00
【问题描述】:

给定一个类,例如org.eclipse.ui.views.navigator.ResourceNavigator,我如何找出要使用的 jar 文件?我知道它在 org.eclipse.ui.ide 中,但我怎么才能找到呢?

编辑:感谢所有回答的人。像许多事情一样,似乎有几种方法可以给这只猫剥皮。我希望 javadoc 包含此信息。到目前为止,这里有不同的方法:

  1. 没有 Internet、Eclipse 或 NetBeans:

    for f in `find . -name '*.jar'`;  do echo $f && jar tvf $f | grep -i $1; done
    
  2. 如果你想在本地使用 Eclipse 查找:

  3. 如果你想从网上查找或者你还没有jar:

【问题讨论】:

  • 啊!这样一个丑陋的方式来做那个发现。我更喜欢: for f in $(find . -name *.jar);回声 $f && jar tvf $f | grep -i $1;完成
  • 很高兴您将答案汇总在一起。 @Ubersoldat,为什么这么丑?
  • 我讨厌那些讨厌的反引号。我是西班牙人,我们不会将它们用于任何事情,除非我们做错了什么。此外,它们很难阅读。这就是为什么我更喜欢 $( something )
  • @eugeneyokota 嘿,有没有办法在代码中搜索它?就像代码中的 api 或某些工具来搜索 Jar?

标签: java eclipse jar


【解决方案1】:

通常,我会使用jar -vtf foo.jar 来获取所有类文件的列表。
不是最实用的方法,但很方便。当然,您可以将结果与 grep 结合起来。

【讨论】:

  • 这将帮助你从 JAR --> 类中获得,但不是相反,这是他所要求的......
  • 对不起?我的方法显示一个类是否在一个 jar 中,如果您花时间探索项目的所有 jar,这几乎就是所要求的。当然,将 for 用作 k3andme 节目会有所帮助。
  • 如果您在 1000 个 JAR 中要找到 1 个类文件,那么您就有问题了...(这并不罕见,在我的工作场所,我使用了数千个 JAR)
【解决方案2】:

使用类/JAR 定位器:

http://classlocator.sourceforge.net/

[编辑] 即使从 ClassLocator 的文档 (!) 中也不明显,但它似乎是一个 Eclipse 插件。

【讨论】:

    【解决方案3】:

    如果您的类路径/项目路径中有 jar,请按 CTRL-SHIFT-T 并输入名称...该 jar 将显示在底部。

    如果您的构建路径中没有该类 a) 将一个包含所有 jar 的虚拟项目放在一起 b) 我认为有一个插件可以从 IBM Alphaworks 中找到 jars(但这可能有点过时了)

    【讨论】:

    • Ctrl+Shift+T?在什么节目?什么系统?
    • @PhiLho 在 Eclipse 中。这就是原始问题的标记。
    • @KonstantinNaryshkin 多哈!对于缺少它,原始帖子上的-1仅依赖于标签,缺少在标题或消息本身中表明这一点。鉴于这里的大多数答案都在 Eclipse 之外,我并不是唯一一个错过了答案的人。 (或者我们认为它只是为了找到 Eclipse 类?)无论如何,通用答案很有用。旁注:感谢您回答我的问题(迟到总比没有好);并且用键盘快捷键给出答案有点脆弱,因为可以更改它们(我可以,但不是这个)。在这里,它是 Open Type 功能的快捷方式。
    【解决方案4】:

    使用这个:netbeans plugin

    jarFinder服务

    【讨论】:

      【解决方案5】:

      你也有这个 eclipse 插件:jarclassfinder

      用户输入未找到的类名(或Java项目需要访问的类名)。该插件将在所选目录(和子目录)中搜索包含该类的 JAR 文件。

      所有结果都显示在自定义视图的表格中。然后,用户可以浏览此表并选择 JAR 文件以添加到他的 Java 项目的构建路径中。然后,用户右键单击表中的条目,并从上下文菜单中选择要将其添加到的构建路径。


      2013 年更新,正如我在“searching through .jar files eclipse”中提到的,它不再被维护,替代品也很少。

      作为sunleo cmets below:

      在 Eclipse 中,Ctfl+Shift+T 仍然是查找类型的最简单替代方法
      (在状态栏中显示 jar 名称)。


      user862268cmetsbelow:

      对于mac,在Eclipse中是cmd+shift+T查找类和关联的jar。

      【讨论】:

      • @Kevin:是的,我似乎再也找不到了。
      • 更好地检查下面提到的答案,如“在 Eclipse 中查找 Ctrl+Shift+T”。
      • @sunleo 是的。我已将其包含在答案中以提高知名度。
      • 对于 mac,在 Eclipse 中使用 cmd+shift+T 来查找类和关联的 jar。
      • @user862268 谢谢。我已将您的评论包含在内以提高知名度。
      【解决方案6】:

      要回答这个问题,没有真正的方法可以知道要使用哪个 jar。不同的版本可能会有不同的行为。

      在定位包含给定类的 jar 时,我使用:

      for f in `find . -name '*.jar'`;  do echo $f && jar tvf $f | grep -i $1; done
      

      这将突出显示包含作为参数传入任何子文件夹中的类名的任何 jar。

      另一种查找课程的好方法是使用the maven repos search

      【讨论】:

        【解决方案7】:

        我不确定我是否真的理解这个问题,但是如果您想验证您的课程是否真的在 jar 中,您可以随时查看 jar 本身,为此您不需要任何 Eclipse插件或专门的外部应用程序。

        JAR (Java ARchive) 文件只不过是 ZIP 文件。您所要做的就是解压缩 jar,甚至使用 zip-reading 应用程序查看它。例如,在 Windows XP 下,它内置于操作系统中。多么方便。

        希望这会有所帮助...

        尤瓦尔=8-)

        【讨论】:

        • 有时候,你感兴趣的类包含在哪个 jar 文件中并不明显。
        【解决方案8】:

        我使用FindJar.com。它列出了包含任何给定类的所有已知包!这非常有用。

        【讨论】:

        • 没有找到 org.eclipse.ui.views.navigator.ResourceNavigator。 jarfinder.com 工作。
        • oracle.jdbc.driver.OracleDriver jarfinder 没有找到它,而 findjar 找到了。
        【解决方案9】:

        在 Intellij IDEA 中,您只需 ctrl-单击类名,您将被移动到该类的伪源代码,窗口标题将类似于 c:\path\to\lib.jar!\com\something \ClassName.class

        【讨论】:

          【解决方案10】:

          同时检查http://javacio.us/

          【讨论】:

          • 我在搜索结果中没有看到 jar 文件。
          【解决方案11】:
          【解决方案12】:

          您也可以尝试Jarvana 来查找特定类的 jar 文件。

          【讨论】:

            【解决方案13】:
            **shell> find . -name "*.jar" | xargs -i -t \jar tvf {} | grep [TheClassNameYouAreLookingFor]**
            

            例如,如果您正在 apache commons jar 列表中查找类 LogFactory.class,则以下命令将起作用

            shell> find apache-commons/ -name "*.jar" | xargs -i -t \jar tvf {} | grep LogFactory.class
            
            jar tvf apache-commons/commons-beanutils-1.7.0.jar
            
            jar tvf apache-commons/commons-fileupload-1.2.1.jar
            
            jar tvf apache-commons/commons-lang-2.3.jar
            
            **jar tvf apache-commons/commons-logging-1.1.jar**
            
            **21140 Tue May 09 23:08:12 EDT 2006 org/apache/commons/logging/LogFactory.class**
            
            jar tvf apache-commons/commons-net-1.3.0.jar
            

            以上结果表明匹配的是commons-logging-1.1.jar

            【讨论】:

              【解决方案14】:

              在 Eclipse IDE 中使用 Ctrl+Shift+T

              打开类型对话框出现在您输入类名的地方。在显示包标识符和 jar 目标之后。

              【讨论】:

                【解决方案15】:

                我投票支持 CTRL-SHIFT-T,因为它已经包含在 Eclipse 中。我实际上在 Eclipse 安装中的插件目录中删除了 jarclassfinder.jar,但仍然无法在 Eclipse GUI 中找到该插件

                【讨论】:

                  【解决方案16】:

                  对我来说这很好用:

                  find * -type f -name '*.jar' -exec grep -l 'TestClass.class' '{}' \;
                  

                  问候

                  【讨论】:

                    【解决方案17】:

                    如果您告诉 eclipse 打开声明 (F3) 或实现 (Navigate->Open Implementation),然后您会弹出一个不可编辑的编辑窗口,您可以通过右键单击编辑器来查看 jar 文件的路径窗口并选择“在面包屑中显示”

                    我的基于 unix 的查找:

                    find . -name "*.jar" -print -exec jar -tf {} \; >outputfile
                    

                    编辑输出文件以找到你想要的(而不是 grep)

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2013-01-11
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多