Пример itext7 Hello World с java.lang.NoClassDefFoundError

Я использую maven на centos 7 и начинаю с iText7. Я следил за учебным пособием по редактированию файла pom и проекта Hello World, но когда я набираю

java -cp target/xxx-1.0-SNAPSHOT.jar com.itext.app.App

я получил

java.lang.NoClassDefFoundError: com/itextpdf/layout/element/IBlockElement

Поскольку я новичок в создании проекта Java в Linux, поэтому я не могу понять, в чем может быть проблема.

Пример itext7 Hello World с java.lang.NoClassDefFoundErrorПример itext7 Hello World с java.lang.NoClassDefFoundErrorПример itext7 Hello World с java.lang.NoClassDefFoundError

Пожалуйста, сообщите нам, какой учебник вы следуете. Пожалуйста, добавьте свой код и файл pom после ваших изменений.

Uladzimir Asipchuk 15.04.2019 10:35

@UladzimirAsipchuk Привет, я добавил файл pom и код. Учебник есть на сайте, насколько я помню, имя HelloWorld2.java

benben994 15.04.2019 10:43

Похоже, вы пытаетесь запустить из встроенного файла jar. Является ли файл jar толстой банкой? В противном случае у него не будет iText в пути к классам во время выполнения, и вам нужно будет добавить их в путь к классам при добавлении встроенного jar.

Ben Ingle 16.04.2019 04:27

Привет @BenIngle, разве Maven не загрузит файл jar автоматически, если я напишу файл pom? Насколько я понимаю... (я новичок в использовании maven с командой)

benben994 16.04.2019 04:58

По умолчанию Maven не включает зависимости в банку. Однако есть ряд плагинов, которые делают это за вас, в первую очередь плагин Maven Assembly и плагин Shade. Проверьте этот ТАК вопрос: stackoverflow.com/questions/16222748/…

Ben Ingle 16.04.2019 14:36
Не удалось выполнить цель org.apache.maven.plugins
Не удалось выполнить цель org.apache.maven.plugins
Опишу, что когда я только начинал изучать Maven, у меня не получалось компилировать и упаковывать.
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Если вы являетесь веб-разработчиком или тестировщиком, вы можете быть знакомы с Selenium, популярным инструментом для автоматизации работы...
0
5
557
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Я предполагаю, что ваша банка времени выполнения не включает в себя связанный iText, и iText не добавляется в ваш путь к классам. Два варианта:

  1. Используйте плагин Maven Assembly или Shade, чтобы связать толстую/убер банку. Maven по умолчанию не связывает зависимости. Используя один из этих плагинов, Maven создаст банку, включающую все зависимости, указанные в вашем POM. Затем вы можете запустить свое приложение с помощью той же командной строки. Подробности см. в этом вопросе SO: Создание толстой банки с использованием maven

  2. Добавьте iText в путь к классам во время выполнения. Ваша командная строка будет выглядеть так:

java -cp /path/to/iText-7/;target/xxx-1.0-SNAPSHOT.jar com.itext.app.App

Как я уже упоминал, моя команда: java -cp target/xxx-1.0-SNAPSHOT.jar com.itext.app.App, которая похожа на ваш второй метод. Но все же попробую другой способ, спасибо!

benben994 17.04.2019 04:02

Привет @BenIngle, я попробовал твое первое решение, и оно сработало отлично! Спасибо за совет. Сначала я подумал, что проблема связана с библиотекой itext, но, похоже, это проблема с зависимостями. Хотя я до сих пор не понимаю, как правильно скомпилировать второй метод, но первый метод полностью работает!

benben994 17.04.2019 05:20

Рад, что смог помочь. Для второго варианта Java не знает об iText в вашем исходном вопросе, потому что Maven не поместил файлы jar iText в банку сборки, и вы не сказали Java, где его найти. Мое второе решение сообщает Java, где найти файлы jar iText, которые вы либо загружаете вручную с веб-сайта iText, либо загружаете для себя Maven. Проверьте здесь для установки пути к классам: docs.oracle.com/javase/7/docs/technotes/tools/windows/…. И проверьте здесь, чтобы найти банки, загруженные Maven: baeldung.com/maven-local-repository

Ben Ingle 17.04.2019 20:56

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