torutkのブログ

ソフトウェア・エンジニアのブログ

NetBeans IDE自体のソースコードを一部ビルドする試み

はじめに(NetBeans 8.2更新版でのスクロールバグ)

NetBeans IDE 8.2の更新版および開発版では、テキストエディタ機能においてIME経由で文字を入力すると、キー操作でのスクロールができなくなるバグが発生しています。
https://netbeans.org/bugzilla/show_bug.cgi?id=269262

このバグを登録したjunich11さんのブログに、修正パッチも添付した旨書かれていました。
http://junichi11.com/?p=3620

そこで、そのパッチを自分の環境でビルドして差し替えてみようとNetBeans IDEのソースを取得し、パッチを適用してビルドしてみようと思いました。

NetBeans IDEソースコード入手

NetBeans IDEは、それ自身がJavaで記述されています。また、コード量もとても大きく、単純にjavaのソースファイルの行数を数えると2千万行超でした。

まず、ソースコードNetBeans IDEリポジトリから取得します。リポジトリmercurialで管理されているので、mercurialをインストールしてからリポジトリをクローンします。取得方法は以前に調べて次に記載しています。
NetBeans - ソフトウェアエンジニアリング - Torutk

特定の機能をビルドしたい

IME使用時、キー操作によるスクロールが出来なくなる問題の暫定パッチは、ソースファイルを検索したところ、editor.lib2フォルダにありました。これをNetBeansで開き、パッチの修正をしてビルドを実行するとエラーになってしまいました。

ant -f D:\\work\\netbeans_src\\main\\editor.lib2 -Dcontinue.after.failing.tests=true netbeans
init-tasks:
D:\work\netbeans_src\main\nbbuild\default.xml:55: taskdef class org.netbeans.nbbuild.JNLPUpdateManifestStartup cannot be found
using the classloader AntClassLoader[]

ぐぐって次のチケットにコメントされている、nbbuildプロジェクトを開きbuild.xmlを展開し、bootstrapターゲットを実行する方法を試してみます。
https://netbeans.org/bugzilla/show_bug.cgi?id=253319

プロジェクトペインで、nbbuildのbuild.xmlを展開し、bootstrapを右クリックして[ターゲット実行]をクリックします。
警告が多数でるものの実行が終了(ビルド成功)しました。

続いて、再びeditor.lib2(Editor Library 2)プロジェクトをビルドします。今度はビルド成功しました。

では、ビルドされたJARファイルを取り出します。が、editor.lib2の下にはビルド結果のJARファイルが見当たりません。editor.lib2のプロジェクト・プロパティでパッケージングを見ると、JARファイルの生成先が、nbbuild\netbeans\ide\modules\org-netbeans-modules-editor-lib2.jar となっていました。

ビルド結果のJARと差し替え

NetBeansのインストールディレクトリ下のide\modulesフォルダにあるorg-netbeans-modules-editor-lib2.jar と、今ビルドしたものとを差し替えます。差し替え後NetBeansを起動して、IMEで文字を入力後カーソルキーでスクロールさせてみます。

うぉー、たしかにスクロールされるようになりました。

要注意

最初、差し替えるJARファイルを削除した後、差し替えJARをコピーせずにうっかりNetBeansを起動してしまい、起動時にエラーとなってその後復旧することができなくなってしまいました。

アンインストールもできなくなって、手でディレクトリを消して対処しました。

別ユーザーで実行してから

最初の検証では、jarファイルの差し替え後、NetBeansの起動オプション--userdirで新規ディレクトリを指定して起動、カーソルの挙動を確認後、--userdirオプションを使わずに起動していました。

次に、別環境でjarファイルの差し替え後、--userdirを指定せずに起動したときは、カーソル挙動が変わりませんでした。

あれ?

念のため、--userdirを指定してNetBeansを起動したら、カーソル挙動が変わりました。そのあと--userdirを指定せずに起動してもカーソル挙動は変わったままとなりました。

どうやら、jarファイルを差し替えただけではだめなようです。