我有一段代码,它在一个环境中工作,在另一个环境中失败。由于某种原因,类加载失败。我使用-verbose标志运行应用程序,以检查差异,但找不到原因。导致问题的类是org.apache.commons.configuration2.PropertiesConfiguration
来自同一个库的其他类以前似乎没有问题地加载。
这是发生错误的一段输出:
[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)虽然这是一个输出片段,但是我没有收到任何错误:
[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加载类。
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插件(我是作者)的库(而不是我编写的)。
发布于 2022-09-29 09:50:33
最后,我可以解决我的问题
我在这里犯了一些错误:完整的堆栈跟踪可能对故障排除很有用。此外,安装(在Eclipse插件中不起作用)似乎发挥了重要作用。
据我所知,这个问题是这样造成的:
RGG.jar (我插件中的库)依赖于commons-configuration (插件中的库)。但是,在commons-configuration中,来自同一个包的类必须使用ClassUtils of commons-lang加载。但commons-lang是从外部提供的Required Plug-ins。似乎它不能从外部访问这个类。
我找到的解决方案是将commons-lang作为一个库添加到该插件中,并删除依赖项。现在,类装载工作。
https://stackoverflow.com/questions/73798664
复制相似问题