我有一个问题需要理解为什么java编译器会在编译类时看到一个他不应该看到的私有方法。当我添加一些依赖项排除时,我在项目中发现了这个错误。可能有人可以解释这里发生的事情。
所以maven项目结构是:
root
|-a
|-b
+-c
dependencies are this:
- a depends on b and excludes c
- b depends on c
给出这些课程:
模块:c
package test;
public class Dto {
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
模块:b
package test;
public class Service {
public void execute(String val1, String val2) {
Dto dto = new Dto();
dto.setValue(val1);
execute(dto, val2);
}
private void execute(Dto val1, String val2) {
System.out.println("val1 = [" + val1 + "], val2 = [" + val2 + "]");
}
}
模块:a
package test;
public class Runner {
public static void main(String[] args) {
Service service = new Service();
service.execute("Hello", "World");
}
}
所以现在发生的是模块 c 和 b 正在成功编译但模块 a 失败并显示以下消息
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project a: Compilation failure
[ERROR] /C:/Users/user/IdeaProjects/test/a/src/main/java/test/Runner.java:[6,16] cannot access test.Dto
[ERROR] class file for test.Dto not found
[ERROR] -> [Help 1]
当我更改私有方法的名称时,一切都很好并且所有模块都成功编译
所以问题是为什么编译器在编译模块 a
时会看到或尝试使用私有方法