IllegalAccessError包含可见性类

时间:2017-11-13 13:00:22

标签: java-8 method-reference

我有两个图书馆。一个包含模型,另一个包含使用模型的东西。两者都在单独的jar文件中。

模型包含(注意AbstractClass具有包可见性)

public class PublicClass extends AbstractClass { }

abstract class AbstractClass {
  private String id;
  private Long key;nter code here
}

其他项目包含使用此模型的测试。

此测试正在运行

@Test
public void testIssue02() {
    String message = elements.stream()
                             .map(a -> publicDao.findById(a.getId()))
                             .map(Object::toString)
                             .collect(Collectors.joining(", "));

    Assert.assertEquals("...", message);
}

此测试失败

@Test
public void testIssue01() {
    //The problem is because package visibility
    String message = elements.stream()
                             .map(PublicClass::getId)
                             .map(publicDao::findById)
                             .map(Object::toString)
                             .collect(Collectors.joining(", "));

    Assert.assertEquals("...", message);
}

两个测试用例之间的区别是testIssue01()使用方法引用从PublicClass获取id,同时testIssue02()直接获取属性。我得到的错误是:

Tests run: 2, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.09 sec <<< FAILURE!
testIssue01(com.personal.sample.lambda.issue.SimpleIssueTest)  Time elapsed: 0.05 sec  <<< ERROR!
java.lang.IllegalAccessError: tried to access class com.personal.sample.test.other.AbstractClass from class com.personal.sample.lambda.issue.SimpleIssueTest
at com.personal.sample.lambda.issue.SimpleIssueTest.lambda$testIssue01$0(SimpleIssueTest.java:27)

两者都是maven项目,当我在执行单元测试的命令行“mvn clean install”中执行时,我只得到了错误。我还使用IntelliJ编辑项目,如果我从IntelliJ运行测试,两个测试用例都有效。

我在github中创建了两个项目来复制案例:

我的问题是:

  • 为什么它在IntelliJ中有效并在控制台中失败?

R。感谢Holger。在命令行中,我正在使用jdk 1.8.51进行编译,并且有一个known issue

  • 出现此错误的原因是什么?

0 个答案:

没有答案