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

opencsv throws exception when called from main, and module-info.java is present

我想使用 opencsv in a project,它是用 Java 14 构建的,使用 Java 模块系统。所以它有一个模块-info.java file.

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

模块信息文件很简单,但可能是错误的:

module opencsvDemo {
    requires opencsv;
    opens demo;
}

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

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

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

您可以尝试使用

requires java.sql;

在您的模块描述符中确保正确解析具有预期 class 的模块。

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