Я собираю приложение Java в один исполняемый файл .jar, так что я распаковываю все необходимые файлы jar, от которых зависит приложение, и включаю все их содержимое вместе с файлами классов реального приложения в один файл .jar ( это IMHO очень удобная особенность задачи jar classi c. Тогда не нужно обрабатывать или распространять несколько jar-файлов, ни вложенные jars-файлы или что-либо подобное.)
До сих пор этот подход работал нормально, но теперь я обновился с log4j (v1) до log4j2 (на самом деле я использую slf4j-API, но версия log4j изменилась).
После этого обновления мой подход больше не работает, но во время выполнения я продолжаю получая сообщение об ошибке: ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
.
Однако все файлы классов log4j-core-version.jar включены в мой файл .jar! Очевидно, какой-то фрагмент кода пытается проверить наличие исходного файла .jar (и не понимает, что содержащиеся классы действительно присутствуют и в пути к классам), а затем выкрикивает.
Я использую log4j- slf4j-impl-2.13.1.jar, slf4j-api-1.7.25.jar, log4j-api-2.13.1.jar и log4j-core-2.13.1.jar (точнее - как описано - только их содержимое, не фактические файлы .jars).
Есть ли способ избежать этого и сообщить регистрационному коду, чтобы он не беспокоился. наличие этого .jar? Я не хотел бы иметь дело и всегда должен распространять два файла .jar только из-за этого.