IAm*_*aja 5 java deployment jar
所以我对Java EE相对较新,我很难理解Java部署文件何时,何地以及为何与其依赖关系打包在一起.
假设我将我的项目构建到myapp.jar中,它取决于fizz.jar,buzz.jar和JODA(joda-time-2.0.jar).
我听说默认的类加载器不打包其他的罐子内罐,所以我必须假设,如果我叫一个罐子从Ant任务,那么默认的类加载器将被调用和myapp.jar就没有那些3创建依赖于它.
这是因为心态是main在容器或其他系统中部署无罐,这些罐将在运行时提供其要求吗?如果没有,那么myapp.jar如何正常运行?
可执行罐子怎么样?要满足,这些必须与main无罐子不同,因为它们是独立的单位,对吧?这意味着他们需要将所有依赖项打包在一起,对吧?
最后但并非最不重要的,那些依赖于依赖于罐子等等的罐子的罐子呢.(即,巨大的依赖图)?
我想所有这些问题可归纳如下:
这些问题的答案实际上将澄清我在Java基础知识方面的许多问题,因此任何输入/帮助都将受到极大的欢迎!谢谢
罐子不知道其他罐子(除非像Maven这样的工具辅助).罐子的依赖性纯粹由类加载器解决.我强烈建议您对类加载器有所了解.
为了解决您的问题,
在一个不可执行的jar背后的想法是,它将以这样一种方式运行,它将知道在运行时查找其依赖关系的类路径?(因此不需要与其依赖项打包)?
可执行jar背后的想法是它是一个独立的单元,应该与它的依赖包打包?
如果我对上面问题#1的断言是正确的,那么这样的类路径配置是如何发生的?这些设置是否存储在jar中(例如清单中)?否则,JRE如何知道在运行时搜索特定jar依赖项的位置?
简而言之,它是拉动所有线程的类加载器.有标准的地方可以找到所有相关的罐子.此链接很好地描述了独立应用程序和已部署(在某些容器中)中的类加载器的工作原理.