【问题标题】:Java - How to find out which Jar file an import comes from?Java - 如何找出导入来自哪个 Jar 文件?
【发布时间】:2011-04-06 07:06:27
【问题描述】:

我正在处理的项目有大约 10 个 jar 文件作为库。在其中一个文件的顶部有一个 import 语句,如:

import jpe.nar.crat.maker.ObjectMakerFactory;

有没有办法判断它来自哪个 Jar 文件?

(如果这很重要,我正在使用 Netbeans。)

【问题讨论】:

    标签: java netbeans jar


    【解决方案1】:

    您可以为此使用CodeSource#getLocation()CodeSource 可通过ProtectionDomain#getCodeSource() 获得。 ProtectionDomain 反过来由Class#getProtectionDomain() 提供。

    URL location = ObjectMakerFactory.class.getProtectionDomain().getCodeSource().getLocation();
    System.out.println(location.getPath());
    // ...
    

    【讨论】:

      【解决方案2】:

      您可以将Jar Class Search 用于netbeans。我不确定它是否仍然兼容,但值得一试。

      【讨论】:

        【解决方案3】:

        以编程方式还是交互方式?

        你可以试试DocJar。在 Eclipse 控件中单击该项目将显示您(编辑面板将显示源代码(如果附加)或可用的方法,而 Package Explorer 将打开该类的树),如果 Netbeans 没有表现出类似的行为,我会感到惊讶庄园。

        【讨论】:

          【解决方案4】:

          我非常喜欢JFind

          http://jfind.sourceforge.net/

          ...它通过查看 jar's、inside war's、inside ear's 等递归地工作...

          如果您将 java 启动器包装在一个 shell 脚本中并将其放在您的 PATH 中,它就会成为一个非常强大的工具:

          即在目录jboss-6.0.0.20100429-M3 中查找所有EntityManager 类:

          $ jfind.sh EntityManager ./jboss-6.0.0.20100429-M3
          Search String: EntityManager
          Windows Search Location: jboss-6.0.0.20100429-M3
          
          ....jjj.jjjjjjjjjjj
          ClassName = javax/persistence/EntityManager.class
          JarName = jboss-6.0.0.20100429-M3\client\hibernate-jpa-2.0-api.jar
          ----------------
          
          
          jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
          jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
          ClassName = org/apache/xerces/impl/XMLEntityManager.class
          JarName = jboss-6.0.0.20100429-M3\client\xercesImpl.jar
          ----------------
          

          一个用于 Cygwin 的小外壳包装器:

          if [ $# -ne 2 ]
          then
            echo "Usage: `basename $0` <classname> [<fromDir>]"
            exit 1
          fi
          
          echo Search String: $1
          SEARCH_LOCATION=`cygpath -w $2`
          echo Windows Search Location: $SEARCH_LOCATION
          
          java -jar `cygpath -w $HOME/bin/JFind.jar` "$1" "$SEARCH_LOCATION"
          echo
          

          【讨论】:

            【解决方案5】:

            您是否尝试过在课堂上进行“公开声明”?在 Eclipse 中,当您执行此操作时,它会打开一个窗口,显示 jar 的名称并告诉您此 jar 具有“无源附件”。我希望 NetBeans 也会发生类似的事情。

            谢谢, 回复

            【讨论】:

            • 在 Eclipse 中,执行“打开声明”。在 Project Explorer 中,单击“Link with Editor”黄色双箭头按钮。在编辑器中打开的类文件将自己映射到项目资源管理器左侧的 jar 和包。
            【解决方案6】:

            我的前同事 Tom 写了 JarSniffer (http://sourceforge.net/projects/jarsniffer/)。这是一个方便的小工具,可以在一组 jar、zip 和目录树中找到一个类。

            【讨论】:

              【解决方案7】:

              在 Netbeans IDE 中: 在您的代码中,ctrl 选择类名。在编辑器中出现相关的 java 文件后(如果您没有该类的源代码,它可能不会显示太多)。右键单击源窗口中的任意位置并选择“在项目中选择”。该类将在它来自的 jar 中突出显示。

              这至少可以追溯到 Netbeans 8.0。

              【讨论】:

                【解决方案8】:

                在 Eclipse 中只需按住 Ctrl 键单击类名(在 import 语句中),然后右键单击 .class 代码,打开一个对话框,·最后选择 Declarations-project。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2016-07-27
                  • 1970-01-01
                  • 2012-08-10
                  • 2015-10-04
                  • 1970-01-01
                  • 2010-12-31
                  • 2016-02-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多