【发布时间】:2011-11-20 08:33:54
【问题描述】:
所以我对 Java EE 还比较陌生,我很难理解 Java 部署文件何时、何地以及为何与它们的依赖项一起打包。
假设我将我的项目构建到 myapp.jar 中,它依赖于 fizz.jar、buzz.jar 和 JODA (joda-time-2.0.jar)。
我听说默认的类加载器不会将 jar 打包到其他 jar 中,所以我必须假设如果我从 Ant 调用 jar 任务,那么默认的类加载器会被调用并且 myapp.jar 将在其中不包含这 3 个依赖项的情况下创建。
这是因为我们的想法是在容器或其他系统中部署main-less jar 以在运行时提供其需求?如果没有,那么 myapp.jar 是如何正确运行的?
可执行 jars 呢?为了满足,这些必须不同于main-less jars,因为它们是独立的单元,对吧?这意味着他们需要将所有依赖项打包在一起,对吧?
最后但并非最不重要的一点是,依赖于 jars 的 jars 的 jars 依赖于 jars...等等。 (即巨大的依赖图)?
我想所有这些问题都可以总结如下:
- 一个不可执行的 jar 背后的想法是,它将以这样一种方式运行,即它会知道在运行时查找其依赖项的类路径吗? (因此不需要与其依赖项一起打包)?
- 可执行 jar 背后的想法是它是一个独立的单元并且应该与其依赖项一起打包吗?
- 如果我对上述问题 #1 的断言是正确的,那么这种类路径配置是如何发生的?这些设置是否存储在 jar 中(例如清单中)?否则,JRE 怎么知道在运行时在哪里搜索特定的 jars 依赖项?
这些问题的答案实际上将澄清我在 Java 基础方面遇到的很多问题,因此我们将不胜感激任何输入/帮助!谢谢
【问题讨论】:
标签: deployment jar java