首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ClassNotFoundException类加载问题

ClassNotFoundException类加载问题
EN

Stack Overflow用户
提问于 2022-09-21 09:44:55
回答 1查看 95关注 0票数 2

我有一段代码,它在一个环境中工作,在另一个环境中失败。由于某种原因,类加载失败。我使用-verbose标志运行应用程序,以检查差异,但找不到原因。导致问题的类是org.apache.commons.configuration2.PropertiesConfiguration

来自同一个库的其他类以前似乎没有问题地加载。

这是发生错误的一段输出:

代码语言:javascript
复制
[52.212s][info][class,load  ] org.apache.commons.beanutils.BeanUtils source: file:/Users/niederle/knimeDev/SDK/Eclipse-workspaces/eclipse_2022-07/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/../../../../../../../git-repositories/knime-scripting/de.mpicbg.knime.scripting.libs/lib/commons-beanutils-1.9.4.jar
[52.213s][info][class,load  ] org.apache.commons.configuration2.io.FileHandler$Updater source: file:/Users/niederle/knimeDev/SDK/Eclipse-workspaces/eclipse_2022-07/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/../../../../../../../git-repositories/knime-scripting/de.mpicbg.knime.scripting.libs/lib/commons-configuration2-2.8.0.jar
[52.213s][info][class,load  ] org.apache.commons.configuration2.io.FileHandler$9 source: file:/Users/niederle/knimeDev/SDK/Eclipse-workspaces/eclipse_2022-07/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/../../../../../../../git-repositories/knime-scripting/de.mpicbg.knime.scripting.libs/lib/commons-configuration2-2.8.0.jar
[52.213s][info][class,load  ] org.apache.commons.configuration2.convert.DefaultListDelimiterHandler source: file:/Users/niederle/knimeDev/SDK/Eclipse-workspaces/eclipse_2022-07/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/../../../../../../../git-repositories/knime-scripting/de.mpicbg.knime.scripting.libs/lib/commons-configuration2-2.8.0.jar
[52.213s][info][class,load  ] org.apache.commons.configuration2.builder.EventListenerProvider source: file:/Users/niederle/knimeDev/SDK/Eclipse-workspaces/eclipse_2022-07/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/../../../../../../../git-repositories/knime-scripting/de.mpicbg.knime.scripting.libs/lib/commons-configuration2-2.8.0.jar
[52.213s][info][class,load  ] org.apache.commons.configuration2.builder.BasicConfigurationBuilder$$Lambda$1498/0x0000000801c16698 source: org.apache.commons.configuration2.builder.BasicConfigurationBuilder
[52.214s][info][class,load  ] org.apache.commons.configuration2.builder.BasicConfigurationBuilder$1 source: file:/Users/niederle/knimeDev/SDK/Eclipse-workspaces/eclipse_2022-07/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/../../../../../../../git-repositories/knime-scripting/de.mpicbg.knime.scripting.libs/lib/commons-configuration2-2.8.0.jar
[52.214s][info][class,load  ] org.apache.commons.lang3.ClassUtils source: file:/Users/niederle/knimeDev/SDK/Eclipse-workspaces/eclipse_2022-07/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.apache.commons.lang3_3.9.0.jar
FATAL    AWT-EventQueue-0 RGGDialogPanel     org.apache.commons.configuration2.ex.ConfigurationRuntimeException: java.lang.ClassNotFoundException: org.apache.commons.configuration2.PropertiesConfiguration
[52.215s][info][class,load  ] java.lang.Throwable$PrintStreamOrWriter source: jrt:/java.base
[52.215s][info][class,load  ] java.lang.Throwable$WrappedPrintStream source: jrt:/java.base
org.apache.commons.configuration2.ex.ConfigurationRuntimeException: java.lang.ClassNotFoundException: org.apache.commons.configuration2.PropertiesConfiguration
    at org.apache.commons.configuration2.beanutils.BeanHelper.fetchBeanClass(BeanHelper.java:427)
    at org.apache.commons.configuration2.beanutils.BeanHelper.createBeanCreationContext(BeanHelper.java:475)
    at org.apache.commons.configuration2.beanutils.BeanHelper.createBean(BeanHelper.java:353)
    at org.apache.commons.configuration2.beanutils.BeanHelper.createBean(BeanHelper.java:371)
    at org.apache.commons.configuration2.beanutils.BeanHelper.createBean(BeanHelper.java:383)
    at org.apache.commons.configuration2.builder.BasicConfigurationBuilder.createResultInstance(BasicConfigurationBuilder.java:361)
    at org.apache.commons.configuration2.builder.BasicConfigurationBuilder.createResult(BasicConfigurationBuilder.java:338)
    at org.apache.commons.configuration2.builder.BasicConfigurationBuilder.getConfiguration(BasicConfigurationBuilder.java:234)
    at at.ac.arcs.rgg.RGG.initRGG(Unknown Source)

虽然这是一个输出片段,但是我没有收到任何错误:

代码语言:javascript
复制
[45.850s][info][class,load] org.apache.commons.beanutils.BeanUtils source: file:/Users/niederle/knimeDev/git-repositories/rgg/lib/commons-beanutils-1.9.4.jar
[45.919s][info][class,load] org.apache.commons.configuration2.io.FileHandler$Updater source: file:/Users/niederle/knimeDev/git-repositories/rgg/lib/commons-configuration2-2.8.0.jar
[45.919s][info][class,load] org.apache.commons.configuration2.io.FileHandler$9 source: file:/Users/niederle/knimeDev/git-repositories/rgg/lib/commons-configuration2-2.8.0.jar
[45.948s][info][class,load] org.apache.commons.configuration2.convert.DefaultListDelimiterHandler source: file:/Users/niederle/knimeDev/git-repositories/rgg/lib/commons-configuration2-2.8.0.jar
[45.955s][info][class,load] org.apache.commons.configuration2.builder.EventListenerProvider source: file:/Users/niederle/knimeDev/git-repositories/rgg/lib/commons-configuration2-2.8.0.jar
[248.267s][info][class,load] org.apache.commons.configuration2.builder.BasicConfigurationBuilder$$Lambda$144/0x0000000800d03740 source: org.apache.commons.configuration2.builder.BasicConfigurationBuilder
[248.280s][info][class,load] org.apache.commons.configuration2.builder.BasicConfigurationBuilder$1 source: file:/Users/niederle/knimeDev/git-repositories/rgg/lib/commons-configuration2-2.8.0.jar
[248.313s][info][class,load] org.apache.commons.lang3.ClassUtils source: file:/Users/niederle/knimeDev/git-repositories/rgg/lib/commons-lang3-3.9.jar
[248.316s][info][class,load] java.lang.NumberFormatException source: jrt:/java.base
[248.325s][info][class,load] java.lang.invoke.LambdaForm$DMH/0x0000000800d06000 source: __JVM_LookupDefineClass__
[248.326s][info][class,load] java.lang.invoke.MethodHandle$1 source: jrt:/java.base
[248.335s][info][class,load] java.lang.invoke.LambdaForm$DMH/0x0000000800d06400 source: __JVM_LookupDefineClass__
[248.340s][info][class,load] org.apache.commons.configuration2.PropertiesConfiguration$$Lambda$145/0x0000000800d07000 source: org.apache.commons.configuration2.PropertiesConfiguration
[248.345s][info][class,load] org.apache.commons.configuration2.PropertiesConfiguration$$Lambda$146/0x0000000800d07220 source: org.apache.commons.configuration2.PropertiesConfiguration

我不确定这是否是正确的故障排除方法,或者它是否给了我一些提示,但我没有看到它。如果有人能帮我解决问题,我会很高兴的。我需要提供更多的信息吗?在这两种环境中提供的Jars应该是相同的。

编辑:

我继续进行故障排除,但仍然没有解决问题。

这是一段引起麻烦的代码。虽然使用Class.forName()加载类似乎有效,但是代码的第二部分由于上面提到的错误而失败。在第二部分中,尝试通过builder.getConfiguration()通过beanutils加载类。

代码语言:javascript
复制
config = new CompositeConfiguration();
try {
    Class.forName("org.apache.commons.configuration2.PropertiesConfiguration");
} catch (ClassNotFoundException e1) {
    System.out.println("failed to load class");
    e1.printStackTrace();
}
FileBasedConfigurationBuilder<PropertiesConfiguration> builder =
        new FileBasedConfigurationBuilder<PropertiesConfiguration>(PropertiesConfiguration.class)
                    .configure(new Parameters().properties()
                    .setURL(RGG.class.getResource("/at/ac/arcs/rgg/config/elementfactory.properties"))
                    .setThrowExceptionOnMissing(true)
                    .setListDelimiterHandler(new DefaultListDelimiterHandler(';'))
                    .setIncludesAllowed(false));
System.out.println("builder initialized");
PropertiesConfiguration newConfig;
try {
    newConfig = builder.getConfiguration();
    config.addConfiguration(newConfig);
} catch (ConfigurationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

如果这是一个库访问问题。我将如何排除故障?

失败的设置如下:代码是jar的一部分,jar用作为RCP应用程序编写的Eclipse插件(我是作者)的库(而不是我编写的)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-29 09:50:33

最后,我可以解决我的问题

我在这里犯了一些错误:完整的堆栈跟踪可能对故障排除很有用。此外,安装(在Eclipse插件中不起作用)似乎发挥了重要作用。

据我所知,这个问题是这样造成的:

RGG.jar (我插件中的库)依赖于commons-configuration (插件中的库)。但是,在commons-configuration中,来自同一个包的类必须使用ClassUtils of commons-lang加载。但commons-lang是从外部提供的Required Plug-ins。似乎它不能从外部访问这个类。

我找到的解决方案是将commons-lang作为一个库添加到该插件中,并删除依赖项。现在,类装载工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73798664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档