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

时间:2018-05-31 19:19:45

标签: java osgi jxbrowser

我正在尝试删除特定于操作系统的铬二进制文件以缩小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);

当这段代码运行时,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$1.run(LoadBrowserTask.java:53)
    at java.lang.Thread.run(Thread.java:748)

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

我不确定还有什么可以尝试,但我不想将特定于操作系统的二进制文件打包到jar,因为这会将文件大小从8MB增加到160MB。

由于

1 个答案:

答案 0 :(得分:1)

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

相关问题