我有两个图书馆。一个包含模型,另一个包含使用模型的东西。两者都在单独的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中创建了两个项目来复制案例:
我的问题是:
R。感谢Holger。在命令行中,我正在使用jdk 1.8.51进行编译,并且有一个known issue。