我想使用opencsv在 project这是用 Java 14 构建的,使用 Java 模块系统。所以它有一个 module-info.java 文件。
从单元测试启动时,对 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 <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3a5955575755544914585f5b544f4e5356497a0b1403140e" rel="noreferrer noopener nofollow">[email protected]</a>/org.apache.commons.beanutils.ConvertUtilsBean.registerOther(ConvertUtilsBean.java:730)
at <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ee8d81838381809dc08c8b8f809b9a87829daedfc0d7c0da" rel="noreferrer noopener nofollow">[email protected]</a>/org.apache.commons.beanutils.ConvertUtilsBean.deregister(ConvertUtilsBean.java:602)
at <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="fa99959797959489d4989f9b948f8e939689bacbd4c3d4ce" rel="noreferrer noopener nofollow">[email protected]</a>/org.apache.commons.beanutils.ConvertUtilsBean.<init>(ConvertUtilsBean.java:161)
at <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6807180d060b1b1e285d465a" rel="noreferrer noopener nofollow">[email protected]</a>/com.opencsv.bean.ConverterPrimitiveTypes.<init>(ConverterPrimitiveTypes.java:88)
at <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="365946535855454076031804" rel="noreferrer noopener nofollow">[email protected]</a>/com.opencsv.bean.AbstractMappingStrategy.determineConverter(AbstractMappingStrategy.java:739)
at <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="573827323934242117627965" rel="noreferrer noopener nofollow">[email protected]</a>/com.opencsv.bean.HeaderColumnNameMappingStrategy.loadAnnotatedFieldMap(HeaderColumnNameMappingStrategy.java:155)
at <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1c736c79727f6f6a5c29322e" rel="noreferrer noopener nofollow">[email protected]</a>/com.opencsv.bean.AbstractMappingStrategy.loadFieldMap(AbstractMappingStrategy.java:405)
at <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b7d8c7d2d9d4c4c1f7829985" rel="noreferrer noopener nofollow">[email protected]</a>/com.opencsv.bean.AbstractMappingStrategy.setType(AbstractMappingStrategy.java:343)
at <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7f100f1a111c0c093f4a514d" rel="noreferrer noopener nofollow">[email protected]</a>/com.opencsv.bean.util.OpencsvUtils.determineMappingStrategy(OpencsvUtils.java:77)
at <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3d524d58535e4e4b7d08130f" rel="noreferrer noopener nofollow">[email protected]</a>/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 升级的库更新等可能会有所帮助。
关于java - 从 main 调用时 opencsv 抛出异常,并且存在 module-info.java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64293538/