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 升级的库更新等可能会有所帮助。
我想使用 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 升级的库更新等可能会有所帮助。