如何解决“Unhandled exception type BeansException”问题

8
我是Spring Batch的初学者。我正在遵循这个指南创建Spring Batch的HelloWorld:guide。在具有main方法的类中,当我尝试使用new ClassPathXmlApplicationContext("...")获取应用程序上下文时,IDE显示错误消息:

未处理的异常类型BeansException

即使我有一个捕获所有类型异常的catch块,我也无法解决该错误。请参考以下代码块:

    public static void main(String args[]) {
        try {
            //error message appears here
            AbstractApplicationContext applicationContext = new ClassPathXmlApplicationContext("simpleJob.xml");

            JobParametersBuilder builder = new JobParametersBuilder();
            builder.addString("Date", "12/02/2011");
            jobLauncher.run(job, builder.toJobParameters());

            JobExecution jobExecution = jobRepository.getLastJobExecution(job.getName(), builder.toJobParameters());
            System.out.println(jobExecution.toString());
        } 
        catch(Exception e) {
            e.printStackTrace();
        } 
    }

然后,我尝试通过import org.springframework.beans.BeansException;导入并捕捉BeansException来解决它。虽然未处理的BeansException错误被解决了,但出现了另一个错误消息:

不能抛出BeansException类型的异常;异常类型必须是Throwable的子类

请参考下面的代码块:
    public static void main(String args[]) {
        try {
            AbstractApplicationContext applicationContext = new ClassPathXmlApplicationContext("simpleJob.xml");

            JobParametersBuilder builder = new JobParametersBuilder();
            builder.addString("Date", "12/02/2011");
            jobLauncher.run(job, builder.toJobParameters());

            JobExecution jobExecution = jobRepository.getLastJobExecution(job.getName(), builder.toJobParameters());
            System.out.println(jobExecution.toString());
        }
        //error message appears here
        catch(BeansException e) {
            //do something
        } 
        catch(Exception e) {
            e.printStackTrace();
        } 
    }

如何正确解决这个错误?

附注:我没有自己命名为BeansException的类。

编辑:堆栈跟踪(选择错误选项):

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    No exception of type BeansException can be thrown; an exception type must be a subclass of Throwable

    at SpringBatchHelloWorld.BatchLauncher.main(BatchLauncher.java:29)

我有spring-batch-core-3.0.6.RELEASE.jar;spring-batch-infrastructure-2.2.0.RELEASE.jar;spring-context-4.2.4.RELEASE.jar;spring-beans-4.2.4.RELEASE.jar。注意:只有在包含spring-beans-4.2.4.RELEASE.jar之后,我才能导入org.springframework.beans.BeansException - karansky
我需要包含 spring-core-4.2.4.RELEASE.jar 吗? - karansky
是的,所有的Spring JAR包应该具有相同的版本。因此,如果您有spring-context4.2.4.RELEASE版本,则spring-core也应该是4.2.4.RELEASE版本。 - Ken Bekov
spring-batch-core 的最新版本是 3.0.6,因此我将所有的 jar 包都改成了 3.0.6,但是仍然出现相同的错误。 - karansky
请添加完整的堆栈跟踪。 - Jens
显示剩余4条评论
2个回答

9
感谢Ken Bekov对这个问题的评论,我能够解决这个问题并制定这个解决方案来正式回答这个问题。Credits应该归功于Ken Bekov。
解决方案: 问题是由于在构建路径中包含了不同版本的.jar文件引起的。应该包括的.jar文件是:spring-context-4.2.5.RELEASE.jarspring-beans-4.2.5.RELEASE.jarspring-core-4.2.5.RELEASE.jar(注意相同的版本号-4.2.5)。
对于spring-batch-core-3.0.6.RELEASE.jarspring-batch-infrastructure-3.0.6.RELEASE.jar和其他库,则不一定需要具有相同的版本号(4.2.5)。
在正确的.jar文件被包含之后,甚至不会出现“Unhandled exception type BeansException”错误消息,也就可以使用new ClassPathXmlApplicationContext("...");

0
1. 从 .m2\repository\org\springframework 文件夹中删除现有的 jars 文件。 2. 使用相同版本的 spring-context.jar、spring-beans.jar 和 spring-core.jar 进行干净的构建。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接