java.lang.NoClassDefFoundError может быть вызван схемой? - PullRequest
0 голосов
/ 16 июня 2019

Извините, если это будет длинный пост, я хочу сделать его максимально понятным.Я пытаюсь импортировать пакет (мы написали, а не встроенный Jar или Java) в другой пакет.Мы используем Eclipse и Ant.Мы используем каждый пакет, который мы написали как плагин.

Минимальная иерархия (без дополнительных пакетов для простоты) в проводнике пакетов выглядит следующим образом:

com.glicha
    Plug-in Dependecies:
    - com.glicha.utils
    - com.glicha.reports

com.glicha.utils
    Plug-in Dependecies:
    - com.glicha.reports

com.glicha.utils.args
    Plug-in Dependecies:
    - com.glicha.utils

com.glicha.reports

Я хочу использоватьcom.glicha.reports в пакете com.glicha.utils.argscom.glicha.utils.args у меня есть следующий метод:

public boolean getData() {
    return data;
}

Я добавил следующую строку в метод getData() (до возврата), чтобы я мог проверить, могу ли я его распечатать (я также импортировалcom.glicha.reports пакет):

System.out.println(Reports.getInstance().getReport(ReportTypes.REPORT_NAME));

Эта точная команда используется в com.glicha и com.glicha.utils, и они отлично работают.Затем я вставил следующую строку в файл MAINFEST.MF:

Require-Bundle:
// ... more packages ...
com.glicha.reports;bundle-version="1.0.0",

Эта же строка находится в файле MAINFEST.MF как com.glicha, так и com.glicha.utils.Он без проблем компилируется, но становится странным, когда я запускаю инструмент (во время выполнения).Я получаю следующую ошибку, когда он попадает в команду печати, которую мы вставили:

java.lang.NoClassDefFoundError: com/glicha/reports/Reports
        at com.glicha.utils.args.Args.getData(Args.java:349)
        at com.glicha.core.MainC.start(MainC.java:1137)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
        at org.eclipse.equinox.launcher.Main.main(Main.java:1386)
Caused by: java.lang.ClassNotFoundException: com.glicha.reports
        at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513)
        at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
        at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
        at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        ... 15 more

Из предыдущих потоков (которые говорят об этом исключении), они предполагают, что есть проблема в пути к классам.Хотя я не могу понять, как это работает в com.glicha и com.glicha.utils, если они используют один и тот же build.xml.У меня есть три теории об этой проблеме:

  1. Это некоторая проблема конфигурации в Eclipse или в Ant (поэтому у нас есть проблема с classpath).
  2. Мы получаем схему при импорте.
  3. Пакет com.glicha.utils.args является так называемым «подпакетом» com.glicha.utils, который уже импортирует пакет com.glicha.reports.

Странная часть заключается в том, что если ясоздайте метод-обёртку, который просто возвращает Reports.getInstance().getReport(ReportTypes.REPORT_NAME) в некотором классе, не входящем в com.glicha.utils.args, и импортируйте его в com.glicha.utils.args, чем он работает.Как мне отладить такую ​​проблему?В чем может быть проблема?

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