Предпочтительный метод для CF2016 +
Вместо того, чтобы разбираться с путем к классу и каждый раз перезагружать сервер, существует более простая опция для CF2016 +. Динамически загружайте банки в ваш Application.cfc, используя this.javaSettings . Параметр LoadPaths
принимает массив из одного или нескольких каталогов (содержащих файлы jar для загрузки):
component {
this.name = "YourAppName";
// loads all jars in the subdirectories named "lib" and "ext"
this.javaSettings = { LoadPaths = [ ".\lib\", ".\ext\" ] };
}
.. или укажите массив отдельных путей к файлам jar:
component {
this.name = "YourAppName";
// loads individual jars
this.javaSettings = { LoadPaths = [ "C:\path\to\pdfbox-2.0.16.jar"
, "C:\path\to\xmpbox-2.0.16.jar"
, .. more paths
]
};
}
Адриан Дж. Морено также указал еще одно преимущество этого подхода:
Гораздо проще проверить JAR-файлы с помощью вашей базы кода и развернуть на
серверы вместо того, чтобы документировать для DevOps, чтобы не забыть поставить
JAR X в местоположении Y, если вам нужно обновить или построить новый сервер.
Старый метод
Однако, чтобы ответить на ваши предыдущие вопросы, наиболее распространенные причины ClassNotFoundException:
Неверное имя класса
CreateObject ожидает имя класса (cAsE sEnSiTiVe).
Jar-файлы не находятся в пути класса CF
Помимо основных путей JVM, CF сканирует только местоположения, перечисленные в Server Settings > ColdFusion Class Path
. Файлы Jar, размещенные в другом месте, не будут обнаружены. (Путь к классу CF по умолчанию включает каталог WEB-INF\lib
)
Размещение нескольких копий библиотеки в пути к классам может иногда вызывать ошибки. Хотя по моему опыту эта проблема обычно вызывает другую ошибку.
Забыл перезапустить CF-сервер
Помимо основных путей JVM, сервер CF сканирует только пути к классам при запуске. Таким образом, сервер CF должен быть перезапущен, чтобы обнаружить любые новые банки.
Ваша ошибка вызвана # 1 - неверное имя класса. org.apache.pdfbox.pdmodel
- это имя пакета - не класса. Имя класса должно быть org.apache.pdfbox.pdmodel.PDDocument
( обратите внимание на написание PDDocument ).