英文:
opencsv throws exception when called from main, and module-info.java is present
问题
我想在使用Java 14构建的项目中(该项目使用Java模块系统),使用opencsv。因此,项目中有一个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 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)
这个错误是我的module-info.java文件中出错了,还是应该在其他地方寻找问题?
英文:
I want to use opencsv in a project that is build with Java 14, using Java module system. So it has a module-info.java file.
A call to a method in opencsv works fine when it's initiated from a unit test, but throws an exception when initiated from the Main.main() method.
If I remove the module-info.java file, the method works fine in both cases.
The module-info file is simple, but probably wrong:
module opencsvDemo {
requires opencsv;
opens demo;
}
When running from Main.main(), I get
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)
Is the error in my module-info.java file, or should I look somewhere else?
答案1
得分: 2
你可以尝试在你的模块描述符中使用
requires java.sql;
以确保能够正确解析带有所需类的模块。
如果代码在没有这个描述符的情况下编译通过,那么肯定是另一个模块负责了这一点。你需要识别出它,并决定选择的进一步路径。这可能是因为你的项目依赖引入了带有相同包的自动模块,这可能会进一步导致分割包问题。在这种情况下,寻找支持Java升级的库更新等可能会有所帮助。
英文:
You can try using
requires java.sql;
in your module descriptor to ensure the module with the expected class is resolved correctly.
If the code compiled without that descriptor, there must be another module responsible for that. You would have to identify it and decide, further on the path to be chosen. It could have been due to dependencies of your project bringing in automatic modules with the same package, which could further cause a split package issue as well. In which case, looking for library updates, etc in favor of Java upgrade might help.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论