java.lang.NoClassDefFoundError可能是由电路引起的?

时间:2019-06-16 13:53:46

标签: java

很抱歉,如果要发表很长的文章,我想让它尽可能地易于理解。 我正在尝试将一个包(我们写的,不是内置的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.args。在com.glicha.utils.args中,我有以下方法:

public boolean getData() {
    return data;
}

我在getData()方法中添加了以下行(返回之前),因此可以检查是否可以打印(我也导入了com.glicha.reports包):

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

此精确命令在com.glichacom.glicha.utils中使用,它们完美地工作。 然后,将以下行插入MAINFEST.MF文件中:

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

同一行位于MAINFEST.MFcom.glicha的{​​{1}}文件中。 它可以编译,没有任何问题,但是当我运行我的工具时(在运行时),它变得很奇怪。当他得到我们插入的打印命令时,出现以下错误:

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.glichacom.glicha.utils中是如何工作的。 关于这个问题,我有三种理论:

  1. 这是Eclipse或Ant中的一些配置问题(因此我们的类路径确实有问题)。
  2. 我们在导入时得到了一个电路。
  3. 软件包build.xmlcom.glicha.utils.args的所谓“子软件包”,已经导入了com.glicha.utils软件包。

奇怪的是,如果我创建了一个“包装器”方法,该方法只返回不在com.glicha.reports中的某个类中的Reports.getInstance().getReport(ReportTypes.REPORT_NAME),然后将其导入到com.glicha.utils.args中,那么它将起作用。 我应该如何调试此类问题?我们能解决什么问题?

0 个答案:

没有答案