Я хочу создать толстую банку для tesseract. Со следующими настройками сборки я получаю jar около 68 МБ с зависимостями для всех поддерживаемых платформ:
dependencies {
implementation group: 'org.bytedeco', name: 'tesseract-platform', version: '4.1.1-1.5.3'
}
jar {
manifest { attributes 'Main-Class': 'BasicExample' }
from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
}
Чтобы уменьшить этот размер, я попытался включить зависимости только для своей платформы в соответствии с это руководство - но безуспешно, см. также это SO question и ответ @Samuel Audet на него (я хочу придерживаться gradle). Поэтому я решил вручную включить только необходимые зависимости из файл POM:
dependencies {
implementation group: 'org.bytedeco', name: 'tesseract', version: '4.1.1-1.5.3'
implementation group: 'org.bytedeco', name: 'tesseract', version: '4.1.1-1.5.3', classifier: 'windows-x86_64'
implementation group: 'org.bytedeco', name: 'leptonica', version: '1.79.0-1.5.3', classifier: 'windows-x86_64'
}
Это уменьшает размер jar примерно до 7 МБ и работает нормально (по крайней мере, для основной пример). Тем не менее я получаю предупреждения:
Warning: Could not load ...: java.lang.UnsatisfiedLinkError: no jnijavacpp in java.library.path: ...
Сравнив две банки, я обнаружил, что в маленькой банке отсутствует путь lib
со всеми библиотеками so
вместе с файлами заголовков, cmake и pkgconfig, и я предполагаю, что это является причиной предупреждений.
Итак, мои вопросы:
- Если эти файлы видимо не нужны для запуска jar, то почему они включаются нормально?
- Как я могу предотвратить эти предупреждения, сохраняя при этом небольшой размер банки?
Любой другой способ создания jar только с необходимыми зависимостями для одной платформы, конечно, также приветствуется.