Как экспортировать внешние jar-файлы вместе с проектом при создании jar-файла проекта

Я использовал три внешних баночки:

  1. Commons-math3-3.0.jar
  2. jcommon-1.0.23.jar
  3. jfreechart-1.9.19-experimental.jar

Когда я пытаюсь создать банку для своего проекта, я получаю сообщение об ошибке:

Exception in thread "main" java.lang.NoClassDefFoundError:

org/jfree/data/xy/XYDataset

       at Main.main(Main.java:124) Caused by: 

java.lang.ClassNotFoundException: org.jfree.data.xy.XYDataset

    at java.net.URLClassLoader.findClass(Unknown Source)

    at java.lang.ClassLoader.loadClass(Unknown Source)

    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)

    at java.lang.ClassLoader.loadClass(Unknown Source)

    ... 1 more

То же самое с помощью IntelliJ.

Я пробовал следующее:

  1. Перейдите в файл> Структура проекта> Модули> Зависимости.
  2. Нажмите на + и добавьте все внешние библиотеки с областью действия как «Скомпилировать».
  3. Нажмите ОК и Применить
  4. Артефакты сборки и банка созданы.

Пожалуйста, предложите.

См. stackoverflow.com/a/42200519/104891.

CrazyCoder 31.07.2018 22:03

Это не дубликат, он другой. Данное решение по ссылке не работает.

archit 31.07.2018 22:07

См. Также stackoverflow.com/a/42660624/104891 и stackoverflow.com/a/45169655/104891.

CrazyCoder 31.07.2018 22:16

Проблема в том, что в файле манифеста нет ссылки на внешние jar-файлы. когда я распаковываю банку, я вижу внешние банки, но как компилятор получит ссылки, если файл манифеста не указывает на него

archit 31.07.2018 22:49

Jar-файлы внутри jar-файлов в любом случае не будут работать, IDE добавляет ссылки или распаковывает jar-файлы автоматически, если артефакт настроен правильно (как описано в stackoverflow.com/a/42200519/104891, либо рядом и связаны через манифест, либо извлеченный внутри одного jar). Обратите внимание, что какой-либо другой манифест из зависимого jar-файла может переопределить исходный, это можно исправить, изменив порядок файлов в артефакте, см. youtrack.jetbrains.com/issue/IDEA-116209#comment=27-656589.

CrazyCoder 31.07.2018 22:50

Как основной jar узнает местоположение jar, когда основной jar экспортируется и запускается .. Должна быть ссылка на внешние библиотеки, верно?

archit 31.07.2018 23:05

IntelliJ IDEA создает файл манифеста со ссылками на другие jar-файлы, когда вы используете параметр связать зависимые jar-файлы через Manifest.MF для артефакта. Пример проекта HelloWithDependencies.zip, упомянутый в первом комментарии, содержит образец проекта. Соберите артефакт, проверьте файл out\linked\HelloWithDependencies.jar\META-INF\MANIFEST.MF, в нем будет ссылка на зависимый jar: Class-Path: log4j-1.2.17.jar.

CrazyCoder 31.07.2018 23:27

Если все еще непонятно, см. этот снимок экрана.

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

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