Программа Java, использующая apache poi 3.9, обнаружила ошибку в файле сборки XML

Привет обнаружил ошибку в сборке xml. Из журнала я думаю, что ошибка связана с библиотекой apache poi «poi-ooxml-3.9-20121203» и версиями Java. В настоящее время я использую JDK 4 и apache poi 3.9.

Buildfile: C:\POITest\build.xml
    init:
    clean:
       [delete] Deleting directory C:\POITest\build
       [delete] Deleting directory C:\POITest\dist
    init:
        [mkdir] Created dir: C:\POITest\dist
        [mkdir] Created dir: C:\POITest\build
        [mkdir] Created dir: C:\POITest\dist\lib
    compile:
        [javac] C:\POITest\build.xml:38: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
        [javac] Compiling 1 source file to C:\POITest\build
        [javac] C:\POITest\src\poi\test\TestMain.java:8: cannot access org.apache.poi.openxml4j.exceptions.InvalidFormatException
        [javac] bad class file: C:\POITest\lib\poi3-9\poi-ooxml-3.9-20121203.jar(org/apache/poi/openxml4j/exceptions/InvalidFormatException.class)
        [javac] class file has wrong version 49.0, should be 48.0
        [javac] Please remove or make sure it appears in the correct subdirectory of the classpath.
        [javac] import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
        [javac]                                            ^
        [javac] 1 error

Список POI JARS

/POITest/lib/poi3-9/commons-codec-1.5.jar
/POITest/lib/poi3-9/commons-logging-1.1.jar
/POITest/lib/poi3-9/dom4j-1.6.1.jar
/POITest/lib/poi3-9/junit-3.8.1.jar
/POITest/lib/poi3-9/log4j-1.2.13.jar
/POITest/lib/poi3-9/poi-3.9-20121203.jar
/POITest/lib/poi3-9/poi-examples-3.9-20121203.jar
/POITest/lib/poi3-9/poi-excelant-3.9-20121203.jar
/POITest/lib/poi3-9/poi-ooxml-3.9-20121203.jar
/POITest/lib/poi3-9/poi-ooxml-schemas-3.9-20121203.jar
/POITest/lib/poi3-9/poi-scratchpad-3.9-20121203.jar
/POITest/lib/poi3-9/stax-api-1.0.1.jar
/POITest/lib/poi3-9/xmlbeans-2.3.0.jar

Просто дайте мне знать, если вам нужно увидеть файл сборки. Может ли кто-нибудь сказать мне, что мне нужно сделать, чтобы решить эту проблему. Спасибо


person dimas    schedule 12.03.2013    source источник
comment
Эта ошибка означает, что POI3 скомпилирован с использованием JDK 5, а вы пытаетесь использовать его с JDK 4. Это не сработает.   -  person longhua    schedule 12.03.2013


Ответы (1)


49.0 и 48.0 — это номер версии формата файла класса. Сообщение об ошибке означает, что POI-3.9 был скомпилирован в формат файла класса JDK 5, и вы пытались использовать его с JDK 4. Конечно, JDK 4 не поддерживает формат файла класса JDK 5. Я думаю, вы можете попробовать более старую версию POI. Или просто используйте JDK 5.

1, начиная с POI 3.5, требуется JDK 1.5. Таким образом, вы можете использовать POI 3.4. См. этот пост: версия Apache POI JDK.

2, Кто-то уже мигрировал POI 3.8 на JDK 1.4. Проверьте, что Apache POI (3.8 final) перенесен на JDK 1.4. Будьте осторожны, чтобы использовать неофициальный двоичный файл. Это может быть не полностью протестировано.

Номер основной версии используемого формата файла класса:

  • J2SE 7 = 51 (0x33 шестнадцатеричный)
  • J2SE 6.0 = 50 (0x32 шестнадцатеричный)
  • J2SE 5.0 = 49 (0x31 шестнадцатеричный)
  • JDK 1.4 = 48 (0x30 шестнадцатеричный)
  • JDK 1.3 = 47 (0x2F шестнадцатеричный)
  • JDK 1.2 = 46 (0x2E шестнадцатеричный)
  • JDK 1.1 = 45 (0x2D шестнадцатеричный)

Ссылки: файл класса Java

person longhua    schedule 12.03.2013
comment
Спасибо, Люанг, в тот момент, когда я не могу изменить JDK. Значит ли это, что я не могу использовать poi 3.9 с jdk 4? и мне нужно использовать более низкие версии poi? - person dimas; 12.03.2013
comment
@dimas обновил ответ. Вы можете перенести poi 3.9 на jdk 4, если у вас есть время. - person longhua; 12.03.2013
comment
@dimas Я проверяю исходный код poi 3.9. Он активно использует дженерики и аннотации. Так что может быть трудно перенести его. - person longhua; 12.03.2013
comment
да я так и думал. В любом случае, спасибо за помощь ... Я публикую дополнительный вопрос для этого. - person dimas; 12.03.2013