【问题标题】:opencsv throws exception when called from main, and module-info.java is present从 main 调用 opencsv 时抛出异常,并且存在 module-info.java
【发布时间】:2020-10-10 12:41:07
【问题描述】:

我想在使用 Java 14 构建的 project 中使用 opencsv,使用 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 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 文件中的错误,还是我应该看看其他地方?

【问题讨论】:

    标签: java opencsv java-module java-platform-module-system java-14


    【解决方案1】:

    你可以试试

    requires java.sql;
    

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

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

    【讨论】:

    • 这有帮助,谢谢!但我不明白为什么,以及我一般如何知道程序需要什么。我的演示项目(在问题中链接)仅依赖于 opencsv 和 junit。显然opencsv需要java.sql;我不明白为什么。
    猜你喜欢
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多