У меня есть следующая структура dynamodb.jar
, где lib/
имеет кучу .jar
. Все эти вложенные .jar
нужны com.mparnisa.dynamodb.table
.
Из другого проекта IntelliJ я пытаюсь создать экземпляр класса в этом dynamodb.jar
:
try {
File file = new File("<path>/dynamo.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);
Object resourceModel = resourceModelClass.newInstance(); // this works
String resourceHandlerClassName = "com.mparnisa.dynamodb.table.CreateHandler";
Class<?> resHandlerClazz = urlClassLoader.loadClass(resourceHandlerClassName);
try {
Object resourceHandlerInstance = resHandlerClazz.newInstance();
} catch (NoClassDefFoundError e) {
System.out.println(e.getMessage());
}
} catch (Exception e){
System.out.println(e.getMessage());
}
Код ломается с
java.lang.NoClassDefFoundError: com/amazonaws/AmazonServiceException
Этот класс находится в одном из вложенных JAR-файлов и имеет import
редактор com.mparnisa.dynamodb.table.CreateHandler
.
Мои вопросы:
- Нужно ли мне что-то менять в MANIFEST.MF, чтобы
import
разрешалось правильно? - Достаточно ли умен
URLClassLoader
, чтобы заглянуть в MANIFEST.MF дляclass-path
?