从main调用时,opencsv引发异常,并且存在module-info.java

问题描述

我想在使用Java模块系统,用Java 14构建的opencsv中使用project。因此它具有一个module-info.java文件

从单元测试启动时,对opencsv中方法调用可以正常工作,但从Main.main()方法中启动时,则引发异常。 如果我删除module-info.java文件,则在两种情况下该方法都可以正常工作。

module-info文件很简单,但可能是错误的:

module opencsvDemo {
    requires opencsv;
    opens demo;
}

从Main.main()运行时,我得到

Exception in thread "main" java.lang.NoClassDefFoundError: java/sql/Date
    at [email protected]/org.apache.commons.beanutils.ConvertUtilsBean.registerOther(ConvertUtilsBean.java:730)
    at [email protected]/org.apache.commons.beanutils.ConvertUtilsBean.deregister(ConvertUtilsBean.java:602)
    at [email protected]/org.apache.commons.beanutils.ConvertUtilsBean.<init>(ConvertUtilsBean.java:161)
    at [email protected]/com.opencsv.bean.ConverterPrimitiveTypes.<init>(ConverterPrimitiveTypes.java:88)
    at [email protected]/com.opencsv.bean.AbstractMappingStrategy.determineConverter(AbstractMappingStrategy.java:739)
    at [email protected]/com.opencsv.bean.HeaderColumnNameMappingStrategy.loadAnnotatedFieldMap(HeaderColumnNameMappingStrategy.java:155)
    at [email protected]/com.opencsv.bean.AbstractMappingStrategy.loadFieldMap(AbstractMappingStrategy.java:405)
    at [email protected]/com.opencsv.bean.AbstractMappingStrategy.setType(AbstractMappingStrategy.java:343)
    at [email protected]/com.opencsv.bean.util.OpencsvUtils.determineMappingStrategy(OpencsvUtils.java:77)
    at [email protected]/com.opencsv.bean.CsvToBeanBuilder.build(CsvToBeanBuilder.java:210)
    at opencsvDemo/demo.CsvGetter.get(CsvGetter.java:23)
    at opencsvDemo/demo.Main.main(Main.java:13)

是我的module-info.java文件中的错误,还是应该在其他地方查看?

解决方法

您可以尝试使用

requires java.sql;

在您的模块描述符中,以确保正确解析了具有预期类的模块。

如果代码编译时没有该描述符,则必须有另一个模块负责。您将不得不识别它并进一步决定要选择的路径。可能是由于项目的依赖关系带来了带有相同软件包的自动模块,这也可能进一步导致拆分软件包问题。在这种情况下,寻找支持Java升级的库更新等可能会有所帮助。