1748429547
2025-05-28 10:23:00
約1か月前に発表しました Cheerpj 4.0、Javaの複数のバージョンをサポートしたWebAssemblyベースのJVMの最初のリリース。
CheerPJ 4.0のリリースは、インフラストラクチャを正しくすること、Java 11を導入しながら長年のJava 8サポートを維持し、Javaのさらなるバージョンをサポートできるようにすることに焦点を当てていました。
私たちで述べたように ロードマップ、私たちの計画は、Java 17のサポートを今年の後半にのみ導入することでした。予想よりも速い進捗状況のおかげで、私たちは今日、この機能を予想よりもはるかに早くリリースしています。 Cheerpj 4.1。これは、2025年末までに予想される将来のCheerPJ 5.0リリースがまだ予定されている安定したサポートのプレビューであることを目的としています。
さらに、以前のリリースでのJava 11の最初のサポートは、さまざまなアプリケーションとライブラリに関する開発者コミュニティから広範なテストを受けました。ユーザーの助けのおかげで、元のリリースのいくつかの重要なバグが見つかり、修正されました。この新しい4.1リリースは、Java 11サポートにより多くの安定性をもたらす機会としても機能します。
新しいものは何ですか?

Java 11モードでCheerpjを介してブラウザで実行されているルーンライト
以前のリリース以来、長い間は過ぎませんでしたが、さまざまなサブシステムで、CheerPJにはすでに多くの改善があります。
Cheerpj 4.1紹介:
- Java 11のSSLとオーディオのサポート
- パフォーマンスの最適化
- ネットワーキングスタックの改善
- スイングとAWTの両方のモバイルユーザビリティの改善
- Java 17サポートのプレビュー
コミュニティからのフィードバックとテストは、CHEERPJの安定性を改善するのに役立つために非常に貴重です。 Java 17がさらに注目を集め、ブラウザでModern Javaを実行するという私たちのビジョンにさらに近い肯定的なフィードバックループをもたらすと予想されます。
Cheerpjは何ができますか?
CheerPJは、ブラウザ向けの完全なWebAssemblyベースのJVMであり、完全なOpenJDKランタイムと、ファイルシステムアクセス、一般ネットワーキングサポート、その他のOSレベルの機能を提供する強力なエミュレーションレイヤーが付属しています。 WebAssembly、JavaScript、HTML5 Technologiesを介して、完全にクライアント側に動作します。本質的には、サーバー側またはクラウドベースのコンポーネントがないJavaScriptライブラリです。
CheerPJは、最新のブラウザ向けの完全で柔軟なJavaプラットフォームです。これは非常に強力なツールであり、現実世界の大規模なエンタープライズアプリケーションの規模で動作するように設計およびテストされています。ここでは、CheerPJが使用できるものの概要です。
大規模なスイング / AWTアプリケーションの実行
CheerPJは、バイトコードから直接、再コンパイルや前処理なしで、既存の完全なJavaアプリケーションを変更されていない瓶から実行できます。難読化された瓶が使用されていることに関係なく、難読化または暗号化された瓶がサポートされています。
ライブで実行されている複雑なスイングアプリケーション。右下のコントロールボタンを使用して、フルスクリーンを試してみます。
AWTベースのアプリケーションとスイングベースの両方のアプリケーションは、サードパーティのスイングルック&フィールなど、サポートされています。複数のアプリケーションは、それぞれ複数のウィンドウを備えており、同じページで同時に実行できます。
CheerPJ 4.1は、モバイルデバイスの前例のないレベルのサポートを導入し、携帯電話、特にタブレットのユーザーが複雑なJavaアプリケーションを初めて利用できるようにします。
Javaアプリケーションを実行するのは簡単で、CheerPJ APIへの3回だけの呼び出しが必要です(私たちを参照してください はじめる 完全に作られた例についてはガイド)。
await cheerpjInit();
cheerpjCreateDisplay(800, 600);
await cheerpjRunJar("/app/my_application_archive.jar");
CheerPJは、Java Bytecodeを大規模に実行するように構築されており、非常に大きなアプリケーションに対して堅牢です。参照点として、私たちの内部ストレステストはIntellijのアイデアであり、約400MBのJARファイルを含むアプリケーションです。
Webアプリケーションの一部としてJavaライブラリを使用します
Cheerpjは、自然で表現力豊かなものを使用してJavaScriptのJavaライブラリを使用することを可能にします async/await ベースのアプローチでは、この機能を呼び出します ライブラリモード。
次のコードのスニペットは、人気のあるものを使用して、この機能についてアイデアを与える必要があります iText ブラウザで完全にクライアント側を生成するライブラリ。
async function iTextExample() {
await cheerpjInit();
const lib = await cheerpjRunLibrary("/app/itextpdf-5.5.13.3.jar");
try {
const Document = await lib.com.itextpdf.text.Document;
const Paragraph = await lib.com.itextpdf.text.Paragraph;
const PdfWriter = await lib.com.itextpdf.text.pdf.PdfWriter;
const FileOutputStream = await lib.java.io.FileOutputStream;
const document = await new Document();
const writer = await PdfWriter.getInstance(
document,
await new FileOutputStream("/files/HelloIText.pdf")
);
await document.open();
await document.add(await new Paragraph("Hello World!"));
await document.close();
await writer.close();
const blob = await cjFileBlob("/files/HelloIText.pdf");
const url = URL.createObjectURL(blob);
pdfDisplay.data = url;
} catch (e) {
const IOException = await lib.java.io.IOException;
if (e instanceof IOException) console.log("I/O error");
else console.log("Unknown error: " + (await e.getMessage()));
}
}
ライブラリモード これらの主な機能を備えたJavaへの広範なアクセスを提供します。
- 新しいオブジェクトの作成
- 静的メソッドとインスタンスメソッドを呼び出します。オーバーロードがサポートされており、引数タイプを考慮して正しい方法が解決されます。
- 読み取りと執筆の両方で、静的フィールドとインスタンスフィールドにアクセスします。
- JavaScriptからのJavaの例外を処理します(通常の
try/catchブロック)
ライブラリモード ユニークな機能であり、WebネイティブコンポーネントとJavaライブラリを組み合わせて複雑な機能を実装する、完全にクライアント側のWebアプリケーションの新世代を構築することができます。
より多くのエンタープライズシナリオでは、このアプローチを使用して、Javaの元のビジネスロジックのすべてまたは一部を維持しながらUIを書き換えることにより、ネイティブWebアプリに大規模なJavaアプリケーションを徐々に移行できます。これにより、大規模な近代化プロジェクトにリスク、コスト、タイムラインの大幅な削減が得られます。
詳細については、専用のドキュメントをご覧ください ライブラリモード
デモ:ブラウザ内の未修正のMinecraft
CheerPJの機能を紹介するために、名前のサイドプロジェクトを作成しました browsercraft、Minecraftの歴史的なJavaバージョンのWebベースの「埋め込み」。
あなたが見たかもしれない他のアプローチとは反対に、browsercraftは逆コンパイルやリバースエンジニアリングの試みに基づいていません。オリジナル client.jar エンドユーザーブラウザのMojangサーバーから直接フェッチされ、変更されていない実行されます。 Mavenから利用可能なLWJGL依存関係も変更されていません。
CheerPJでLWJGLの仕組みは特に興味深いものです。 表面的に Java。その値のほとんどは、OpenGLによって公開されるすべての方法に直接アクセスできるJNIメソッドから来ています。これらのメソッドはCで記述され、OpenGL APIの宣言的表現からLWJGLビルドシステムによって自動的に生成されます。
CheerPJ 4.1は、JNI WebAssemblyモジュールを介してこれらのシナリオのサポートを導入します。これは、共有ライブラリを介してネイティブプラットフォームで起こることと同様に、動的にロードおよび実行されます。 browsercraftは、LWJGLネイティブコードのこの機能を利用しています。 gl4es 図書館。この後者のコンポーネントは、Minecraftが使用するOpenGLとWebGLが提供するGLEの間の互換性レイヤーを提供します。
これらのWebAssemblyモジュールと変更されていない瓶を組み合わせることにより、CheerPJはブラウザでMinecraftを正しくレンダリングできるようになりました。 Minecraftは有名で非効率的でリソース集中的なアプリケーションであることに注意する必要があります。 ストレステスト Cheerpjの場合。それにもかかわらず、私たちのJITコンパイラの最近の改善のおかげで、デモはほとんどのミッドレンジマシンで満足のいくパフォーマンスで実行できるようになりました。現在計画されているより高度な最適化のおかげで、状況は将来さらに改善されます。
次は何ですか?
CheerPJの開発は急速に動いています。 CHEERPJ 5.0のリリースは、当初発表されたように、今年の後半にまだ予定されています ロードマップ。
私たちが出荷する予定の改善の長いリストがあります。ここにはいくつかのハイライトがあります。
- 安定したJava 17サポート:cheerpj 4.1を使用すると、Java 17のサポートがそれほど遠くない将来にどのように見えるかのプレビューをリリースしました。ユーザーからのフィードバックを収集して、CheerPJ 5.0がリリースされるまでに高レベルの安定性を実現する予定です。
- NPMサポート:CheerPJは、主にレガシーJavaアプリケーションを実行するために歴史的に使用されてきました。これは、ほとんどは通常、NPMエコシステムの事前日付である環境で使用されています。 CheerPJが最新のJavaを実行できるようになったので、NPMネイティブCheerPJバージョンを提供して、最新のプロジェクトへの統合を合理化します。
- ネイティブJNIモジュールサポートを拡張します:これにより、Javafx、SWTをサポートし、最終的にユーザーがJavaライブラリ用に独自のWASM JNIモジュールを構築できるようになります。
ライセンス
CheerPJは商用ソフトウェアですが、FOSSプロジェクト、個人プロジェクト、1人の企業には無料で使用できます。手頃な価格の透明なライセンスは、中小企業に適用されます。
エンタープライズのライセンスとサポートが利用可能で、非営利機関や教育機関に大幅な割引があります。詳細については、参照してください ライセンス。
それを試して、コミュニティに参加してください
開発者のドキュメント、チュートリアルと完全なAPIリファレンスには、多くの初心者向けのリソースを見つけることができます。
質問、議論、サポートについては、参加してください 不和。それは、Leaning Technologies開発者と経験豊富なユーザーの両方が助けを提供できるアクティブなコミュニティです。
第2版の成功に続いて WebVMハッカソン 今年の初めに、私たちは最初のものをホストすることにしました Cheerpj Hackathon
。イベントのテーマと正確な日付はまだ決定されていますが、2025年9月から10月の間に開催される1週間の競争であり、500ポンドの賞が優勝チームを待っています。 今すぐサインアップしてください
更新を維持します。
CheerPJは、Amsterdam(NL)とLeeds(UK)に拠点を置くWebAssemblyハッカーの国際チームであるLeaning Technologiesによって、情熱と多くのコーヒーで構築された製品です。私たちと同じくらいあなたがそれを気に入るのを願っています。
#ブラウザのJava現在Java #17をサポートしていますプレビュー