JxBrowser устанавливает BrowserPreferences.setChromiumDir () в каталог с бинарными файлами ОС, все еще пытается извлечь, выбрасывает - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь удалить специфичные для ОС двоичные файлы хрома, чтобы уменьшить размер банки, и установить их при первом запуске.Я пытался следовать документам , поэтому я удалил jar-файлы -mac, -linux и -win jxbrowser из файла pom.xml, извлек jxbrowser-mac-6.17.jar в каталог и установилJXBrowser для загрузки двоичных файлов оттуда через следующие 3 функции (по одной и объединяя их):

BrowserPreferences.setChromiumDir(path), System.setProperty("jxbrowser.chromium.dir", path) и System.setProperty(BrowserPreferences.CHROMIUM_DIR_PROPERTY, path)

Указанный каталогсодержит файл jxbrowser-mac-6.17.jar и его извлеченные файлы (каталоги 7zr-mac, chromium-mac.7z, com и META_INF).Я создаю облегченный браузер со следующим:

BrowserContextParams params = new BrowserContextParams(chromiumDir.getAbsolutePath());
BrowserContext context = new BrowserContext(params);
Browser browser = new Browser(BrowserType.LIGHTWEIGHT, context);

Когда этот код запускается, файлы 7zr-mac и chromium-mac.7z исчезают из каталога, и выдается несколько ошибок, например:

Caused by: com.teamdev.jxbrowser.chromium.internal.ChromiumExtractorException: Failed to extract Chromium binaries into /Users/bsettle/CytoscapeConfiguration/3/karaf_data/tmp/browsercore-60.0.3112.113.6.17/jxbrowser-mac-6.17
    at com.teamdev.jxbrowser.chromium.internal.ChromiumExtractor.extractChromiumBinariesIfNecessary(SourceFile:88)
    at com.teamdev.jxbrowser.chromium.internal.ipc.IPC.<init>(SourceFile:66)
    at com.teamdev.jxbrowser.chromium.internal.ipc.IPC.create(SourceFile:96)
    at com.teamdev.jxbrowser.chromium.internal.ipc.IPC$a.<clinit>(SourceFile:443)
    ... 7 more
Caused by: java.lang.IllegalArgumentException: The /chromium-mac.7z resource cannot be found in JAR files
    at com.teamdev.jxbrowser.chromium.internal.XZExtractor.a(SourceFile:112)
    at com.teamdev.jxbrowser.chromium.internal.XZExtractor.a(SourceFile:69)
    at com.teamdev.jxbrowser.chromium.internal.XZExtractor.extract(SourceFile:37)
    at com.teamdev.jxbrowser.chromium.internal.b.run(SourceFile:1066)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.teamdev.jxbrowser.chromium.internal.ChromiumExtractor.extractChromiumBinariesIfNecessary(SourceFile:60)
    ... 10 more

Все ошибки указывают на то, что JxBrowser не удалось извлечь двоичные файлы Chromium, поскольку The ___ resource cannot be found in JAR files, но не следует ли пытаться извлечь их, если они уже существуют в каталоге Chromium?(согласно документам ).

Если я попытаюсь снова открыть браузер (указывая на каталог с отсутствующими двоичными файлами, я получаю новую ошибку:

Exception in thread "Thread-150" java.lang.NoClassDefFoundError: Could not initialize class com.teamdev.jxbrowser.chromium.BrowserContext
    at org.cytoscape.cyndex2.internal.util.BrowserManager.getJXBrowser(BrowserManager.java:72)
    at org.cytoscape.cyndex2.internal.util.BrowserManager.getBrowserView(BrowserManager.java:49)
    at org.cytoscape.cyndex2.internal.task.LoadBrowserTask$1.run(LoadBrowserTask.java:53)
    at java.lang.Thread.run(Thread.java:748)

Даже при том, что база jxbrowser-6.17.jarвсе еще поставляется вместе с приложением.

Я не уверен, что еще можно попробовать, но я бы не хотел упаковывать бинарные файлы для ОС с помощью jar, потому что это увеличивает размер файла с 8 МБ до 160 МБ..

Спасибо

1 Ответ

0 голосов
/ 04 июня 2018

Каждый JAR-файл для конкретной платформы содержит архив 7z внутри с двоичными файлами.JxBrowser ожидает найти двоичные файлы из соответствующего архива в каталоге, указанном в системном свойстве jxbrowser.chromium.dir, и, если они не существуют, пытается извлечь их.Чтобы это работало, распакуйте двоичные файлы из соответствующего архива в каталог, указанный в системном свойстве jxbrowser.chromium.dir.

...