【发布时间】:2014-08-11 14:38:21
【问题描述】:
我尝试了一个奇怪的实验。 我在 Eclipse 中创建了一个项目。我创建了 Abc.java,它有一个打印“Hello”到输出的 main 方法。 然后我使用eclipse构建了这个项目。创建了一个名为 Abc.class 的类文件。我将该类文件复制到某个随机位置。然后,我导航到类文件并使用以下命令执行它。
java Abc
它在控制台上打印了“Hello”。到目前为止一切顺利。我假设对于一个简单的 sysout,JVM 不需要解决任何依赖关系。
接下来,我在 Eclipse 中创建了一个非常复杂的程序,为此我必须包含 15 个不同的 jars(例如 slf4j 和 apache-commons)。在 Eclipse 中构建程序后,我只是将其类文件复制到不同的位置(不是 JARS)。 完成所有复杂编码的主要方法仍然是 Abc。
我再次点击了命令(这次我遵循了包结构,所以我不得不调用一个稍微不同的命令)。
java com.great.Abc
我的印象是,由于我没有在 java 命令中的类路径中添加任何 jar,所以这段代码会很糟糕(记住它有很多依赖项)。 但是,它工作得很好。
谁能解释一下原因?
(半小时后:|) 与此同时,我尝试了另一个实验,这让我更加惊讶。我把通过eclipse生成的所有class文件都邮寄到了另一台电脑上(注意我没有邮寄jar文件,只有eclipse生成的class文件)。
我在那里运行程序,希望这次它会中断。 你猜怎么着,它运行完美。有输入吗?
只有在编译时才需要 jars 吗? 在创建程序时,如何确保在运行时需要我使用的 jar? 无论问题看起来多么愚蠢,请冷静地解释。 :)
【问题讨论】:
-
你以什么方式构建项目?
-
如果您的
com.great.Abc类没有导入这些依赖项,那么它应该可以正常运行。 -
com.great.Abc 不会导入这些依赖项,但是它使用同一包中的其他类文件(有关系)。这些其他类文件使用这些依赖项。一切都好吗?
-
@DipanshuVerma:即使其他文件导入了依赖项,它们是否真的使用它们?他们真的创建了其中定义的类的实例吗?