代码之家  ›  专栏  ›  技术社区  ›  R D

类加载器行为:java-cp jars与在pom中添加maven依赖关系

  •  1
  • R D  · 技术社区  · 8 年前

    当我们使用 -classpath

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

    我主要关心的是我是否添加了jar through-classpath或top-in-maven dependency或bottom-in-maven dependency,它们的行为是否不同。

    1 回复  |  直到 8 年前
        1
  •  1
  •   tryingToLearn    8 年前

    类路径中的顺序:

    它由指定jar的顺序指定。类路径上的jar“earlier”将优先于“later”指定的jar。假设在类路径中指定2个jar:

     -cp jar1 jar2
    

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

    更多信息 in this 邮政总局

    maven订单:

    enter image description here

    如果在pom.xml中更改顺序,则可以看到该顺序将发生变化

    enter image description here

    两者都有 -classpath 选项和maven一样,jar指定的first wins。所以你的观察是正确的。

    -cp 和马文 :如果使用两者的组合,则 -cp公司

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

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

    接下来的版本将取决于您首先指定的依赖项。如果首先指定jarA,则会出现X1.1;如果首先指定jarB,则会出现X1.2。

    enter image description here