让我们举个例子:构建一个库 * A*,它有3个依赖项 * X,Y,Z*,我们创建2个JAR:* 常规 * 和 * 脂肪 。
我们有一个服务 B,其中我们首先导入普通JAR,然后导入FAT jar。
1.在第一种情况下(常规JAR),我们是否需要手动导入B中的所有依赖项(X,Y,Z),以便A工作(导入A的JAR不会自动导入其所有传递(直接)依赖项- X,Y,Z)? /或/* 库将工作(调用它的方法),但试图从X,Y,Z调用方法将失败,我们将需要手动导入它们?
1.在第二个场景中,因为FatJAR已经嵌入了所有的依赖项,所以我们不需要添加任何依赖项,对吗?我们既可以使用A,也可以使用来自X、Y和Z的方法和类。
我在1)和2)中说的是对的吗?是这样的吗
运行时类路径vs编译类路径for normal vs FAT JAR
1.包括A的普通JAR作为对B的依赖:
- 编译类路径是否只有A依赖项?
- 运行时类路径是否有A、X、Y和Z依赖项?
1.包括A的FAT JAR作为B的依赖项:
- 编译类路径是否有A、X、Y和Z依赖项?
- 运行时类路径是否有A、X、Y和Z依赖项?
在这些场景中,编译类路径和运行时类路径看起来是这样的吗?
1条答案
按热度按时间tzcvj98z1#
是的,你的理解是正确的。
综上所述,常规的**
JARs
需要您手动管理依赖项**,而**FAT JARs
(或UBER JARs
)将所有依赖项捆绑在一起**,减少了为每个依赖项管理单独的JAR
文件的需求,从而更方便分发和部署。然而,值得注意的是,使用
FAT JARs
可能会导致更大的JAR
大小,这在某些情况下可能是一个问题。看看这个