JxBrowser 将 BrowserPreferences.setChromiumDir() 设置为具有 OS 特定二进制文件的目录,仍然尝试提取,抛出

JxBrowser set BrowserPreferences.setChromiumDir() to directory with OS-specific binaries, still tries to extract, throws

我正在尝试删除特定于 OS 的 chromium 二进制文件以缩小 jar 的大小,并将它们安装在第一个 运行 上。我试图遵循 the docs,所以我从 pom.xml 文件中删除了 -mac、-linux 和 -win jxbrowser jar,提取了 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);

当此代码 运行s 时,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 目录中,它不应该尝试提取它们吗? (根据 the docs)。

如果我尝试再次打开浏览器(指向现在缺少二进制文件的目录,我会收到一个新错误:

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.run(LoadBrowserTask.java:53)
    at java.lang.Thread.run(Thread.java:748)

即使基础 jxbrowser-6.17.jar 仍然与应用程序打包在一起。

我不确定还能尝试什么,但我不想将特定于 OS 的二进制文件与 jar 打包在一起,因为这会将文件大小从 8MB 增加到 160MB。

谢谢

每个特定于平台的 JAR 文件都包含一个带有二进制文件的 7z 存档。 JxBrowser 期望从 jxbrowser.chromium.dir 系统 属性 指定的目录中的相应存档中找到二进制文件,如果它们不存在,则尝试提取它们。要使其正常工作,请将相应存档中的二进制文件解压缩到 jxbrowser.chromium.dir 系统 属性.

指定的目录中