运行java程序与jar或解压缩包有什么区别?

时间:2011-01-13 07:17:47

标签: java

在使用jar运行java程序或解压缩包之间是否有任何差异? 现在我遇到了一个奇怪的探测器。我有一个搜索程序。当我用jar运行它时,没关系。 当我运行它只是将包解压缩到jar,然后gc日志是

2 个答案:

答案 0 :(得分:1)

与JVM的观点没有区别。 JVM知道从文件系统或zip文件透明地加载类。

我并不完全明白哪个GC日志是这样的,但我坚信如果你从jar或unpacked类路径运行java程序有任何不同,可能是由

引起的
  • 真实班级路径的差异
  • 访问文件系统中特定路径的问题(导致实际类路径的差异)
  • 您传递给JVM的选项的差异(-D和-X选项)
  • 可能是环境方面的其他差异。例如,您可能是第一次运行,用户A和第二次是用户B.或者您可能更改了工作目录。

另一种选择是,如果您尝试运行的程序以编程方式(在应用程序层上)使用自己的类路径进行交易。我看到程序假定它必须从名为mycompany.jar的jar中执行。否则它不起作用。

答案 1 :(得分:1)

稍微扩大AlexR的答案;与JVM的观点没有区别,但是从资源的角度来看可能存在差异。

那是:

java -cp test.jar com.company.test

unzip -d test test.jar
java -cp test com.company.test

在某些特定情况下可以产生不同的结果。我能想到的唯一一个就是在阅读ZIP文件资源时。从JAR文件中检索资源的标准资源阅读器无法传递给ZipFileReader,而从磁盘上的文件传入的资源可以是。

那就是说,鉴于你所看到的差异,这不太可能是你的问题,而且这门课程几乎肯定是其中之一:

  • 直接或通过环境变量
  • 的不同命令行参数
  • 不同的类路径。请注意,java -jar test.jarjava -cp test.jar com.company.test不是一回事,可能有不同的类路径。

请查看AlexR's answer以获取其他建议。