首页 > 解决方案 > Maven项目依赖中的包类覆盖,这种行为叫什么?

问题描述

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

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 调用consume()Consumer 对象的方法,它会正确打印,我正在 DEPENDENCY 项目中做事

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

<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 类,它会打印出I'm doing things in the TEST project

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

标签: javaspringmavendependenciesdependency-management

解决方案


This is a dependency injection only, you are able to access the child project(dependency) functionalities in your Test Project as long as it is in your classpath.

In your case, I see both Worker class is on the same package?


推荐阅读