java.lang.NoClassDefFoundError: org / apache / poi / ss / usermodel / Row - PullRequest
0 голосов
/ 30 декабря 2018

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

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

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

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

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, и все еще та же ошибка.Есть идеи?

1 Ответ

0 голосов
/ 30 декабря 2018

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

Попробуйте создать "толстый кувшин" (также известный как uber-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, вы можете следовать этому разделу документации , относящейся к Исполняемым банкам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...