当找到类但静态初始化失败时,也会抛出NoClassDefFound。在这种情况下,在程序启动时,日志中应该有一个信息更丰富的异常。
我有一个JAR文件,如下所示:
MacBook@ ~/workspace-sync/mparnisa_dynamodb2/out/artifacts/dynamodb $ jar tf dynamodb.jar | head
META-INF/MANIFEST.MF
mparnisa-dynamodb-table.json
com/
com/mparnisa/
com/mparnisa/dynamodb/
com/mparnisa/dynamodb/table/
com/mparnisa/dynamodb/table/ResourceModel$ResourceModelBuilder.class
com/mparnisa/dynamodb/table/ResourceModel.class
com/amazonaws/AmazonServiceException.class
// and many more...
在IntelliJ项目中,我想创建一个ResourceModel
的实例,它看起来像这样:
package com.mparnisa.dynamodb.table;
@com.fasterxml.jackson.annotation.JsonAutoDetect(fieldVisibility = com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.ANY, getterVisibility = com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE, setterVisibility = com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE)
public class ResourceModel {
所以在我的代码中,我写了这样的:
File file = new File("/Users/mparnisa/workspace-sync/mparnisa_dynamodb2/out/artifacts/dynamodb/dynamodb.jar");
URL url = file.toURI().toURL();
URL[] urls = new URL[]{url};
ClassLoader urlClassLoader = new URLClassLoader(urls);
String resourceModelClassName = "com.mparnisa.dynamodb.table.ResourceModel";
Class<?> resourceModelClass = urlClassLoader.loadClass(resourceModelClassName);
但最后一行抛出了一个异常:
java.lang.ClassNotFoundException: com.mparnisa.dynamodb.table.ResourceModel