簡體   English   中英

Class ClassNotFoundException 加載問題

[英]Class loading issue with ClassNotFoundException

我有一段代碼可以在一個環境中工作而在另一個環境中失敗。 由於某種原因,class 加載失敗。 我使用 -verbose 標志運行應用程序以檢查差異,但找不到原因。 導致問題的 class 是org.apache.commons.configuration2.PropertiesConfiguration

來自同一庫的其他類之前似乎沒有問題地加載過。

這是發生錯誤的output的一段:

[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)

雖然這是 output 的一部分,但我沒有收到任何錯誤:

[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 加載Class.forName()似乎有效,但代碼的第二部分失敗並出現上述錯誤。 在第二部分中,嘗試通過beanutils將 class 加載到builder.getConfiguration()中的某處。

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 的一部分,它用作為 RCP 應用程序(不是我)編寫的 Eclipse 插件(我作為作者)的庫。

最后,我可以解決我的問題

我在這里犯了一些錯誤:完整的堆棧跟蹤可能對故障排除很有用。 此外,設置(不適用於 Eclipse 插件)似乎發揮了重要作用。

據我了解,問題是這樣引起的:

RGG.jar (我的插件中的庫)依賴於commons-configuration (我的插件中的庫)。 但是隨后在commons-configuration中,來自同一個 package 的 class 必須加載commons-langClassUtils 但是commons-lang是作為Required Plug-ins從外部提供的。 好像不能從外面訪問這個class。

我找到的解決方案是將commons-lang作為庫添加到該插件並刪除依賴項。 現在 class 加載工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM