Java.lang.NoClassDefFoundError: org / apache / poi / ss / usermodel / Row

Я сделал небольшое приложение, которое читает из Excel (файл xls) и отображает содержимое в JTable. В eclipse все работает нормально, но когда я создаю файл jar и пытаюсь его запустить, у меня возникает следующая проблема:

java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/Row

Странная вещь, которую я обнаружил, заключается в том, что проблема связана с строкой, когда Workbook и Sheet вызываются перед строкой и не вызывают никаких проблем (по крайней мере, из того, что я вижу).

Я много исследовал, и в основном это похоже на то, что файлы jar не находятся в Class-Path, но открывая jar и файл манифеста, я вижу, что все jar-файлы присутствуют.

Class-Path: poi-ooxml-4.0.1.jar poi-4.0.1.jar commons-codec-1.11.jar commons-collections4-4.2.jar commons-math3-3.6.1.jar commons-compress-1.18.jar curvesapi-1.05.jar poi-ooxml-schemas-4.0.1.jar xmlbeans-3.0.2.jar

Вот что у меня в файле pom.xml:

<build>
 <plugins>
  <plugin>
    <!-- Build an executable JAR -->
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
      <archive>
       <manifest>
          <addClasspath>true</addClasspath>
          <classpathPrefix>./</classpathPrefix>
           <mainClass>com.clientdb.classes.DynamicRegForm</mainClass>
         </manifest>
       </archive>
     </configuration>
    </plugin>
  </plugins>
</build>
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.1</version>
   </dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.0.1</version>
</dependency>
</dependencies>

Я также попытался загрузить файлы jar и добавить их в проект вместо добавления зависимости к файлу pom, и все та же ошибка. Любые идеи?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
4 062
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вероятно, вы получаете это, только когда запускаете jar потому что зависимости недоступны / упакованы внутри него.

Попробуйте создать "толстая банка" (также известный как убер-банка), он упакует все ваши зависимости внутри jar:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <finalName>YOUR_JAR_FINAL_NAME</finalName>
            </configuration>
        </plugin>
    </plugins>
</build>

Документация, относящаяся к maven-shade-plugin, может быть найдено здесь.

Обновлено: Поскольку вы используете исполняемый файл jar, вы можете следовать этот раздел документации, относящемуся к Исполняемые файлы JAR

Это сработало отлично! Большое спасибо и с Новым годом !!

colin 30.12.2018 21:39

Другие вопросы по теме