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
系统 属性.
指定的目录中
我正在尝试删除特定于 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
系统 属性.