从依赖jar中找不到类

时间:2016-11-06 12:48:40

标签: java excel eclipse apache-poi xssf

在我的项目中,我使用apache.poi libs来处理excel文件。我有依赖:

  • apache.poi.ooxml_3.15
  • apache.poi_3.15
  • apache.poi.ooxml_schemas_3.15

罐子。所以在编译期间没有问题。 在运行时:

image: alpine:3.4

before_script:
  - apk update && apk add openssl
  - wget https://github.com/spf13/hugo/releases/download/v0.16/hugo_0.16_linux-64bit.tgz
  - echo "37ee91ab3469afbf7602a091d466dfa5  hugo_0.16_linux-64bit.tgz" | md5sum -c
  - tar xf hugo_0.16_linux-64bit.tgz && cp ./hugo /usr/bin
  - hugo version

test:
  script:
  - hugo
  except:
  - master

pages:
  script:
  - hugo -t strange-case -v
  artifacts:
    paths:
    - public
  only:
  - master

第1行正常工作,第2行引发异常:

    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    ...
    Workbook workbook2003 = new HSSFWorkbook(); //1
    Workbook workbook2007 = new XSSFWorkbook(); //2

Caused by: java.lang.ClassNotFoundException: org.apache.poi.ss.usermodel.Workbook cannot be found by org.apache.poi.ooxml_3.15.0 at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:461) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:372) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:364) at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:161) at java.lang.ClassLoader.loadClass(Unknown Source) ... 41 more 位于org.apache.poi.ss.usermodel.Workbook,但在运行时,jvm会尝试在apache.poi_3.15中找到它。不确定为什么?

也许有人可以帮我解决这个问题。

有关项目的更多细节:   - Ide:eclipse neon.1 |   - 这是e4项目   - java 8

2 个答案:

答案 0 :(得分:2)

由于XSSFWorkbook适用于OOXML架构,因此它会从Workbook jar加载poi.ooxml类。您可能会收到此错误,因为xmlbeams jar在运行时也需要作为依赖项。

<强>更新

commons-logging还需要

commons-codeccommons-collectionslog4jpoi个罐子。请检查您是否已导入它们。所有这些jars都已存在于您可能已下载的poi-bin-3.15-20160924文件中。有关各种组件的先决条件,请参阅this page

希望这会有所帮助!!

答案 1 :(得分:0)

该库可能具有第二种情况所需的其他运行时依赖性。您可以尝试将项目设置为maven项目吗?它应该解决您的问题,因为maven也会关注您明确定义的库的依赖关系。