【问题标题】:In JAVA, how do I determine where an import is coming from?在 JAVA 中,如何确定导入的来源?
【发布时间】:2017-11-28 20:55:56
【问题描述】:

我没有使用任何 IDE 并尝试修复在 tomcat 中部署的 war 文件的一些错误。我正在尝试寻找包的来源,而错误的行似乎需要参数,并且已从诸如

之类的某些包中导入
import com.somefirm.somepackage.someClass;

以下问题没有回答我的问题:

In eclipse determine which jar file a class is from

How can I find files imported in a java class

我想知道有什么方法可以手动找到import 的来源。有没有可能?类如何查找要导入的包?

编辑 1:用换行符分隔链接。

编辑 2:“我目前没有使用任何 IDE”这个问题有点晚了。所以将 Am not using IDE 添加到第一行。

编辑 3:使问题更加清晰,说明我为什么需要它。

编辑 4:添加了这些编辑。感谢@Jude-niroshan 和@ErwinBolwidt

【问题讨论】:

  • 对于大多数 IDE,如果您将 CTRL + click 放入 import 语句的 someClass,IDE 将打开该类的源代码(反编译或可能是实际源代码,如果您将依赖项链接到源代码代码)。然后,您可以交叉引用您的目录结构以查看哪个 JAR 提供了此类。
  • @AyushyaChitransh 改变问题的含义以使现有答案和 cmets 无效是真的令人讨厌和糟糕的形式 - 特别是当您没有表明您已编辑问题时,
  • 有一个名为 Jar Finder(或类似的东西)的工具,它可以在一个充满 JAR 的文件夹中搜索类。我认为这可能是您唯一的选择,在所有 JAR 依赖项中搜索您的类。请注意,如果您使用的是 Maven 或 Gradle 之类的东西,这会容易得多。如果可能,请考虑进行切换。
  • 不,您在编辑之前的问题是“目前没有使用任何 IDE” - 所以建议您如何使用 IDE回答您的问题。
  • 类在运行时从类路径中解析。如果您仅限于“盒子上已有的工具”,因为 jar 文件只是 zip 文件,您可以使用 zip 命令(或 JDK 中的 jar 命令)列出 war 中每个 jar 的内容,并使用 grep 获取目录/ 文件名(JVM 映射到包和类名)

标签: java


【解决方案1】:

重点是:类的确切位置由您的类路径设置决定。

在某些时候定义在编译您的应用程序时哪些类可用,分别与哪些类一起提供。

因此,当您不使用 ide 时 - 您必须在应用到您的构建的类路径中搜索“元素”。例如通过查看每个 jar 文件。

鉴于您的 cmets:我认为您必须退后一步。您似乎缺乏 Java 的基本知识。您必须了解如何构建 WAR 文件。应该有一些类的构建描述;包含 依赖项 和 WAR 交付的其他内容。你必须分析这些。除此之外:如果这些包来自您的团队/公司/... 一个简单的文件搜索可能会完成这项工作。如果这些包是“外部的”,比如开源库——那么你可能会尝试简单的谷歌搜索类名;或转到 grepcode.com。

你问的另一件事是:编译类只包含完全限定的类名。类文件中不再有 no 导入语句。因此,当一个类“需要”另一个类时,它会要求 JVM 加载该类(给定完全限定的名称)。 JVM 只是查看类路径,并加载与给定名称匹配的第一个类。

【讨论】:

  • 我想这意味着我必须查看定义了 class path 的“元素”的 jar 文件。 jar 文件是指那些用于构建战争文件的文件?会不会在部署war文件时创建的文件夹中找不到?
  • 查看我的更新。但我的直觉是:你必须先认真做一些学习。当您缺乏理解问题的技能时,我们无法向您解释问题解决方案 - 因为您对 Java 的了解非常有限!
  • @AyushyaChitransh 得到另一个小更新,关于编译类中的导入。
  • 我是 JAVA 新手,甚至没有构建过战争文件,我正在使用来自 github.com/reactome/container/blob/feature/tomcat/… 的脚本在同一个项目中构建战争文件。
猜你喜欢
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多