Fat jar 与普通 jar 依赖关系解析

问题描述 投票:0回答:1

让我们看以下示例:构建一个具有 3 个依赖项 X、Y、Z 的库 A,然后创建 2 个 JAR:regularFAT

我们有一个服务 B,我们首先导入普通 JAR,然后导入 FAT jar。

  1. 在第一种情况(常规 JAR)中,我们需要手动导入 B 中的所有依赖项(X、Y、Z),以便 A 工作(导入 A 的 JAR 不会自动导入其所有传递(直接)依赖项 - X ,Y,Z)? / OR / 该库可以工作(调用它的方法),但尝试从 X、Y、Z 调用方法将会失败,我们需要手动导入它们?
  2. 在第二种情况下,因为 Fat JAR 嵌入了所有依赖项,所以我们不需要添加任何依赖项,对吧?我们既可以使用 A,也可以使用 X、Y 和 Z 中的方法和类。

我在 1) 和 2) 中所说的对吗?是这样的吗?

正常运行时类路径与编译类路径 vs FAT JAR

  1. 将 A 的普通 JAR 包含为 B 的依赖项:
  • 编译类路径只会有一个依赖项?
  • 运行时类路径将具有 A、X、Y 和 Z 依赖项?
  1. 将 A 的 FAT JAR 包含为 B 的依赖项:
  • 编译类路径将具有 A、X、Y 和 Z 依赖项?
  • 运行时类路径将具有 A、X、Y 和 Z 依赖项?

在这些场景中编译类路径和运行时类路径是这样的吗?

java gradle jar dependencies classpath
1个回答
0
投票

是的,您的理解是正确的

总而言之,常规的

JARs
需要您手动管理依赖项,而
FAT JARs
(或
UBER JARs
)将所有依赖项捆绑在一起
,使得分发和部署更加方便,因为它减少了需要为每个依赖项管理单独的
JAR
文件。

但是,值得注意的是,使用

FAT JARs
可能会导致
JAR
尺寸变大,这 在某些情况下可能会出现问题

看看这个:

© www.soinside.com 2019 - 2024. All rights reserved.