gpt4 book ai didi

java - 类加载器行为 : java -cp jars vs adding maven dependency in pom

转载 作者:行者123 更新时间:2023-11-30 10:12:38 25 4
gpt4 key购买 nike

当我们使用 -classpath 加载 jar 并在 maven 依赖项中添加 jar 时,类加载器如何确定 jar 的优先级?

maven如何加载jar?它是否遵循基于 pom.xml 中添加的依赖顺序的任何顺序?因为很少有 jar 根据添加 jar 的顺序(顶部或底部)表现不同。

我主要担心的是,如果我通过 -classpath 添加 jar 或在 maven 依赖项中添加 top 或在 maven 依赖项中添加 bottom,它的行为会有所不同。

最佳答案

类路径中的顺序:

它是由指定 jar 的顺序指定的。类路径中“较早”的 Jar 将优先于“较晚”指定的 Jar。假设您在类路径中指定了 2 个 jar :

 -cp jar1 jar2

现在两个 jar 可能有相同的包/类 com.abc.Util.java。因此在运行时,jar1 中的类将被选中,因为 jar1 在类路径中的 jar2 之前指定。

更多信息 in this所以发布

在 maven 中排序:

通过在 pom.xml 中指定优先级较高的 jar 高于较低优先级的 jar,可以在 maven 中实现与上述相同的行为。我已经在 maven 3.x 上测试过了,如果你看到依赖选项卡,

enter image description here

你可以看到如果你在pom.xml中改变顺序,顺序也会改变

enter image description here

总结:-classpath 选项和maven 中,首先指定的jar 获胜。所以你的观察是正确的。

ORDER in case of -cp and maven:如果您使用两者的组合,则 -cp 选项将赢得第一优先权。

关于 maven 的另一件事。因为,当您在 pom.xml 中指定依赖项时,它会自动带来它自己的依赖项(传递依赖项)。

假设您在 pom 中指定了依赖项 A,它带来了依赖项 X 版本 1.1。之后你在 pom 中定义依赖 B,它也需要依赖 X 但版本为 1.2。现在您认为哪个版本的 X 会出现?

即将到来的版本将取决于您首先指定的依赖项。如果先指定jarA,则X1.1,如果先指定jarB,则X1.2。

您可以在 dependency-hierarchy 选项卡中检查此行为,您会看到一些传递依赖项将被省略。例如:下面是一些其他 jar 之前会带来 commons-io 2.6

enter image description here

关于java - 类加载器行为 : java -cp jars vs adding maven dependency in pom,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51779213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com