【问题标题】:Package class override in maven project dependency, what is this behavior called?maven项目依赖中的包类覆盖,这种行为叫什么?
【发布时间】:2021-11-26 09:25:21
【问题描述】:

我有一个依赖项目,我在其中定义了以下类

package it.dependency.common;

public class Consumer {
    public void consume() {
        Worker dependency = new Worker();
        dependency.work();
    }
}

和

package it.dependency.common;

public class Worker {
    public void work() {
        System.out.println("I'm doing things in the DEPENDENCY project");
    }
}

如果我运行一个简单的 main 函数,调用 Consumer 对象的 mathod consume(),它会正确打印我在 DEPENDENCY 项目中做事。

我将这个 maven 项目编译到一个 jar 中,并将它作为另一个项目的依赖项导入到另一个项目中,称为 test project

<dependency>
    <groupId>org.example</groupId>
    <artifactId>dependency</artifactId>
    <version>1.0-SNAPSHOT</version>
    <systemPath>${lib.path}/dependency-1.0-SNAPSHOT.jar</systemPath>
</dependency>

我可以重新定义其他类,例如

package it.dependency.common;

public class Worker {
    public void work() {
        System.out.println("I'm doing things in the TEST project");
    }
}

现在,如果我在调用 DEPENDENCY 项目的 Consumer 类的地方运行一个简单的 main,它会打印出 我正在 TEST 项目中做事。

所以消费者实际上使用了它不知道的项目的 Worker 类。像一个覆盖包类? 这种行为是如何工作的以及它是如何被调用的?

【问题讨论】:

    标签: java spring maven dependencies dependency-management


    【解决方案1】:

    这只是一个依赖注入,你可以访问你的测试项目中的子项目(依赖)功能,只要它在你的类路径中。

    在你的情况下,我看到两个 Worker 类在同一个包上?

    【讨论】:

    • 没错。他们在同一个项目中具有相同的 Worker 类,但 MAIN 项目调用依赖项目的 Consumer 类,该类在理论上调用依赖项的 worker 内部
    猜你喜欢
    • 2013-02-13
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 2014-03-18
    • 1970-01-01
    相关资源
    最近更新 更多