java.lang.IllegalAccessError 同时使用 spring 批处理获取执行列表

java.lang.IllegalAccessError while using spring batch to get the list of executions

我在尝试 运行 spring 批处理加载执行列表时遇到此错误。

java.lang.IllegalAccessError: tried to access method org.springframework.batch.core.repository.dao.JdbcJobExecutionDao.getJobParameters(Ljava/lang/Long;)Lorg/springframework/batch/core/JobParameters; from class org.springframework.batch.admin.service.JdbcSearchableJobExecutionDao

经过一些分析,我发现 JdbcJobExecutionDao 是 Spring-batch 的一部分,并且将 getJobParameters() 的实现作为受保护的方法,而 JdbcSearchableJobExecutionDao 是 spring-batch-admin 的一部分它扩展了 JdbcJobExecutionDao。

所以根据 Oracle 文档,它说 IllegalAccessError 是 -

Thrown if an application attempts to access or modify a field or to call a method that it does not have access to.

Normally, this error is caught by the compiler; this error can only occur at run time if the definition of a class has incompatibly changed.

我不明白,我无法控制这些jars/classes。我在使用它们时做错了什么吗?还是我对这两个罐子使用的版本有问题。

spring-批处理 - 版本 2.2.0.RELEASE

spring-batch-admin - 版本 1.3.0.BUILD-SNAPSHOT(也尝试使用 1.3.0.RELEASE)

引用网站 - java.lang.IllegalAccessError: tried to access method

https://github.com/spring-projects/spring-batch/blob/master/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcJobExecutionDao.java

https://github.com/spring-projects/spring-batch-admin/blob/master/spring-batch-admin-manager/src/main/java/org/springframework/batch/admin/service/JdbcSearchableJobExecutionDao.java

所以,我通过使用正确的版本修复了这个问题。这是 spring-batch 和 spring-batch-admin 之间的版本不匹配问题。我参考了这个 spring 文档站点并尝试了推荐的版本并且成功了!

http://docs.spring.io/spring-batch-admin/spring-batch-admin-manager/dependencies.html

所以,现在我正在使用

2.2.7.RELEASE(Spring-Batch)

1.3.1.RELEASE(Spring-Batch-Admin)

我再也收不到 java.lang.IllegalAccessError 了。需要检查是否有任何其他功能受到干扰,因为这是一个非常古老的项目。

希望这对面临类似问题的人有所帮助。