Я использую 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, поэтому я не могу понять, в чем может быть проблема.



@UladzimirAsipchuk Привет, я добавил файл pom и код. Учебник есть на сайте, насколько я помню, имя HelloWorld2.java
Похоже, вы пытаетесь запустить из встроенного файла jar. Является ли файл jar толстой банкой? В противном случае у него не будет iText в пути к классам во время выполнения, и вам нужно будет добавить их в путь к классам при добавлении встроенного jar.
Привет @BenIngle, разве Maven не загрузит файл jar автоматически, если я напишу файл pom? Насколько я понимаю... (я новичок в использовании maven с командой)
По умолчанию Maven не включает зависимости в банку. Однако есть ряд плагинов, которые делают это за вас, в первую очередь плагин Maven Assembly и плагин Shade. Проверьте этот ТАК вопрос: stackoverflow.com/questions/16222748/…


Я предполагаю, что ваша банка времени выполнения не включает в себя связанный iText, и iText не добавляется в ваш путь к классам. Два варианта:
Используйте плагин Maven Assembly или Shade, чтобы связать толстую/убер банку. Maven по умолчанию не связывает зависимости. Используя один из этих плагинов, Maven создаст банку, включающую все зависимости, указанные в вашем POM. Затем вы можете запустить свое приложение с помощью той же командной строки. Подробности см. в этом вопросе SO: Создание толстой банки с использованием maven
Добавьте 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, которая похожа на ваш второй метод. Но все же попробую другой способ, спасибо!
Привет @BenIngle, я попробовал твое первое решение, и оно сработало отлично! Спасибо за совет. Сначала я подумал, что проблема связана с библиотекой itext, но, похоже, это проблема с зависимостями. Хотя я до сих пор не понимаю, как правильно скомпилировать второй метод, но первый метод полностью работает!
Рад, что смог помочь. Для второго варианта 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
Пожалуйста, сообщите нам, какой учебник вы следуете. Пожалуйста, добавьте свой код и файл pom после ваших изменений.