私はintelijプラグインを作成しており、実行時にプラットフォーム固有のアーティファクトをダウンロードしたいと考えています。Jxbtrowserは実行時にプラットフォーム固有のアーティファクトを取得します
プラットフォームローダーにプラットフォーム固有のjarをロードしましたが、ChromiumExtractorは接頭辞「/」でネストされたリソースにアクセスできません。ですから私は "chromium-mac.zip"としてリソースにアクセスできますが、ライブラリはアクセスできません。
入れ子にされたジッパー付きのクロムアーチファクトを正しいディレクトリに解凍しようとしましたが、これは有効な解決策にはなりません。だから私は図書館が人工物を抽出する方法をまとめようとしてきましたが、コードがわかりにくいので面倒です。
jxbrowserプラグインには、実行時にアーティファクトを取得するためのサポートがありますか。そのようなサポートを追加できますか(jxbtrowser devsはサポート質問などにSOを使用しています。これはメッセージです:D)?
アプローチが取ら:
// inside intelij plugin . The plugin has the jxbrowser-6.6.jar
// and license.jar loaded into the classloader. the platform specific
// artefact will be retrieved manual).
val cl = URLClassLoader(arrayOf(URL("file://.../jxbrowser-mac-6.6.jar")), Browser::class.java.classLoader)
val backup = Thread.currentThread().contextClassLoader
try {
Thread.currentThread().contextClassLoader = cl
// can access like this
Thread.currentThread().contextClassLoader.getResource("chromium-mac.zip")
val ce = ChromiumExtractor.create()
// cannot access as resource is retrieved "/chromium-mac.zip" ?
ce.extract(BrowserPreferences.getChromiumDir())
browser = Browser()
} finally {
Thread.currentThread().contextClassLoader = backup
}