java编译器方法解析

时间:2018-01-25 18:54:07

标签: java compiler-errors dependencies

我有一个问题需要理解为什么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

时会看到或尝试使用私有方法

0 个答案:

没有答案