junichi11.com https://junichi11.com NetBeans / Inkscape etc. Fri, 06 Jun 2025 13:36:34 +0000 ja hourly 1 https://wordpress.org/?v=6.8.3 Apache NetBeans 26 リリース https://junichi11.com/netbeans/apache-netbeans-26-%e3%83%aa%e3%83%aa%e3%83%bc%e3%82%b9 https://junichi11.com/netbeans/apache-netbeans-26-%e3%83%aa%e3%83%aa%e3%83%bc%e3%82%b9#respond Fri, 06 Jun 2025 13:36:33 +0000 https://junichi11.com/?p=10454

NetBeans 26 がリリースされました。

リリースノート

追加された機能や修正はこちらをご覧ください。
https://github.com/apache/netbeans/releases/tag/26

ダウンロード

ダウンロードは下記から
https://netbeans.apache.org/front/main/download/nb26

注意

今回から公式によるインストーラの配布は行われなくなりました。
インストーラーが必要な方は上記ダウンロードリンクのFriends of Apache NetBeansから配布されているものを使ってください。

インストーラが不要な方はzip版をダウンロードして使ってください。

廃止になった理由は、あまりメンテナンスされていないnbi関連のモジュールを維持できなくなってきたためです。リソースも少ない中で成果物を少なくしてリリースの作業の負担を減らすのも仕方がないことだと思います。

Ubuntuに手動でアプリケーションに登録

desktopファイルを作る。
e.g. /home/<username>/.local/share/applications/Apache NetBeans-26.desktop

[Desktop Entry]
Encoding=UTF-8
Name=Apache NetBeans IDE 26
Comment=The Smarter Way to Code
Exec=/bin/sh "/home/<username>/netbeans/netbeans-26-bin/netbeans/bin/netbeans"
Icon=/home/<username>/netbeans/netbeans-26-bin/netbeans/nb/apache-netbeans.svg
Categories=Application;Development;Java;IDE
Version=1.0
Type=Application
Terminal=0
]]>
https://junichi11.com/netbeans/apache-netbeans-26-%e3%83%aa%e3%83%aa%e3%83%bc%e3%82%b9/feed 0
Inkscape独習ナビの補足 https://junichi11.com/inkscape/inkscape-navi-supplement https://junichi11.com/inkscape/inkscape-navi-supplement#comments Fri, 05 Mar 2021 11:51:56 +0000 https://junichi11.com/?p=7309

Inkscape独習ナビは、Inkscape 0.91の環境のもとで書きました。現在はInkscape 1.0.x がリリースされています。最新のバージョンではバグなどで挙動が変わってしまっている部分もあるので補足をします。

レッスン2 「6.葉をパスに沿わせる」

Inkscape 1.0ではp.66の「6.葉をパスに沿わせる」を実行しようとすると、書籍と同じ結果を得ることができません。

これはInkscapeのバグが原因です。既に下記に報告しています。

https://gitlab.com/inkscape/extensions/-/issues/241

書籍と同じ結果にするためには、「6.葉をパスに沿わせる」の前に下記の手順を実行してください。

  1. グループ化された葉のオブジェクトを選択して、[オブジェクト]メニューの[グループ解除]を2回(すべてのグループ化を解除するまで)行う。([Ctrl]+[Shift]+[G])
  2. 葉の部分を全部選択した状態で、[編集]メニューの[クローン]の[クローンのリンクの解除]を行う。([Shift]+[Alt]+[D])
  3. 葉の部分を全部選択した状態で、[パス]メニューの[結合]を行う。([Ctrl]+[K])

以上でレッスン2の「6.葉をパスに沿わせる」の補足は終わりです。

他にも、何かお気づきの点がありましたら、インプレス宛にお問い合わせとしてメールをお送りいただくか、私のtwitterにリプいただけたら、わかる範囲でお答えいたします。

]]>
https://junichi11.com/inkscape/inkscape-navi-supplement/feed 2
NetBeans Explore from here plugin https://junichi11.com/netbeans/netbeans-explore-from-here-plugin https://junichi11.com/netbeans/netbeans-explore-from-here-plugin#respond Fri, 28 Aug 2020 03:22:57 +0000 https://junichi11.com/?p=6701

Explore from here pluginをNetBeans 12.0で使えるように修正しました。このプラグインを使うと、選択したノードからOSのファイルエクスプローラーを開くことができます。

Apache NetBeansでも使いたいという日本のNetBeansユーザーの方がいらっしゃっいましたので、オリジナルのリポジトリをクローンして修正してみました。

私も過去に使用していたのですが、ディレクトリを開こうとすると固まってしまうようになったので、使わなくなっていました。

最後に更新されてから7, 8年ぐらい経っていて、依存関係が古かったり非推奨のコードもあったりしたのでそれらを修正しています。

固まる原因はEDTで実際にディレクトリを開くコマンドを実行していたことと、それが終了するのを待っていたことです。

Linuxの環境では固まらずに開くことを確認してます。Windowsでは動作の確認していません。。。

興味のある方がいましたら使ってみてください。もし、不具合等があればお知らせください。

リポジトリ & ダウンロード

]]>
https://junichi11.com/netbeans/netbeans-explore-from-here-plugin/feed 0
NetBeans Plugin Portal3での未検証プラグインのインストール https://junichi11.com/netbeans/netbeans-non-verified-plugins-plugin-portal3 https://junichi11.com/netbeans/netbeans-non-verified-plugins-plugin-portal3#respond Sun, 28 Jun 2020 22:51:04 +0000 https://junichi11.com/?p=6538

新しいPlugin Portal (Plugin Portal 3)でも未検証のプラグインをNetBeans から直接ダウンロードできるのか確認してみました。

基本的には過去に書いた記事と同じ方法でダウンロードできるようになります。違う部分はURLです。

設定

NetBeans 12.0の場合は下記のURLをプラグインの設定に追加します。([Tools]ツール > [Plugins]プラグイン > [Settings]設定 > [Add]追加)名前は適当なものを入力してください。NetBeansのバージョンによってURLを変更する必要があります。(12.0の部分)

https://netbeans.apache.org/nb/plugins/12.0/catalog-experimental.xml

追加すると、Available Pluginsに未検証のプラグインも追加されているはずです。

]]>
https://junichi11.com/netbeans/netbeans-non-verified-plugins-plugin-portal3/feed 0
NetBeans 12.0 LTSのリリース https://junichi11.com/netbeans/netbeans-12-0-lts-release https://junichi11.com/netbeans/netbeans-12-0-lts-release#respond Sun, 21 Jun 2020 13:03:23 +0000 https://junichi11.com/?p=6499

NetBeans 12.0 LTSがリリースされました。

LTS(Long Term Support)について

NetBeans 11.0からリリースサイクルが少し変更されて、マイナーバージョンが0(xx.0)のものはLTSとしてリリースされるようになりました。その他のマイナーバージョンのものは次のLTSに向けた新機能が追加されるFeatureリリースです。リリースは四半期ごとに行われます。
また、LTSがリリースされる前にはNetCATによるテストが行われています。

機能

追加された機能はこちらです。https://netbeans.apache.org/download/nb120/index.html

ダウンロード

ダウンロードはこちらから。https://netbeans.apache.org/download/nb120/nb120.html

プラグインポータル

NetBeans 12.0からはプラグインポータル(PP)のアップデートセンター(UC)が変更になっています。

プラグインポータルの変更に関してはこちらを参照ください。
https://junichi11.com/netbeans/netbeans-new-plugin-portal

もし、新しいPP(https://netbeans-vm.apache.org/pluginportal/)に使いたいプラグインがなければ、古いPP(http://plugins.netbeans.org/PluginPortal/)から手動でダウンロードしてインストールすることもできます。ただし、12.0で動くかどうかはわかりません。

PPに直接アップロードできなくなって、登録するのをやめたプラグイン開発者の方もいますが、NetBeansから直接ダウンロードして使いたいプラグインがあれば、なんとか登録をお願いするほかないです。(nbmがGitHubのreleases等にアップロードされていれば、手動でダウンロード&インストールすることは可能です。)

私のプラグインも今登録中です。もし、不足するものがあればお知らせください。

バグ報告

バグ等がある場合は、NetBeansのJIRAに登録をお願いします。NetBeans Issues

]]>
https://junichi11.com/netbeans/netbeans-12-0-lts-release/feed 0
NetBeans Plugin Portal のこれから https://junichi11.com/netbeans/netbeans-new-plugin-portal https://junichi11.com/netbeans/netbeans-new-plugin-portal#comments Tue, 03 Mar 2020 15:00:00 +0000 https://junichi11.com/?p=6101

NetBeans の Plugin Portal (http://plugins.netbeans.org/PluginPortal/) のApacheのサーバーへの移行について書きます。

現在のPlugin Portal (Plugin Portal 2)の閉鎖

今のPlugin Poral (http://plugins.netbeans.org/PluginPortal/) は 現在バージョン2としてまだOracleのサーバーにあります。しかしながら、NetBeans自体は、既にApacheに移行しているので、すごく近い将来にはなくなります。

なぜ、今のPlugin Portal をApacheのサーバーに移行してないのかというと、各プラグインのライセンスの問題があるからです。(たとえば、GPLのプラグインはApacheのサーバーには置くことはできません。)そのため、今のPlugin Portalを単純にそのままApacheのサーバーに移せばいいというわけにはいかないのです。

新しいPlugin Portal (Plugin Portal 3)

閉鎖されると、もうIDEから直接ダウンロードできなくなってしまうの?と思われるかもしれません。しかし、既にApacheのサーバーにはバージョン3として新しいPlugin Poratal (https://plugins.netbeans.apache.org/) があります。今のPP2が閉鎖された後は、こちらのアップデートセンターを使うように変更されるはずです。

Plugin Portal 2 と 3の違い

プラグインのユーザーは、主にダウンロードするために使うと思いますので、違いを気にする必要はなさそうです。

2と3の違いは以下の通りです。

  • UI
  • ログイン方法
  • 登録方法

3はスクラッチからつくられていて、見た目も2と異なります。

ログイン方法は、外部認証です。GitHubかGoogleのアカウントを使うようになりました。

プラグイン開発者は、登録方法が今までと異なるので注意が必要です。Apacheのサーバーには、Apache License, Version 2と互換性のあるものしか置けないので、今までのようにPPに直接アップロードして管理することはできなくなってしまいました。(たとえば、GPL系のライセンスのプラグインをアップロードできません。)その代わりとして、開発者がMaven Centralにアップロードしたものを使うようになります。

以下はプラグイン開発者のための情報です。

古いバージョンでPlugin Portal のアップデートセンターを使う

今のPPが閉鎖された場合は、当然ながらアップデートセンターも利用できなくなります。閉鎖後にまだ古いバージョンのNetBeansを使いたい場合は、個人のサーバーにバックアップされているcatalogを使うように変更してください。

https://cwiki.apache.org/confluence/display/NETBEANS/Where+to+download+plugins+for+NetBeans+10.0+and+earlier

もちろん、いままでのように、GitHub等に公開されているnbmを手動でダウンロードしてきたものも今まで通りインストールすることができます。

まだ、新しいPlugin Portalにはあまりプラグインがありませんが、プラグイン開発者がMaven Centralにアップロードして、新しいPlugin Portalに登録してくれるのを待つしかありません。

今後のPlugin Portalのついては、以上です。

]]>
https://junichi11.com/netbeans/netbeans-new-plugin-portal/feed 2
NetBeans 11.1のリリースと日本語化 https://junichi11.com/netbeans/netbeans-111-release-and-l10n https://junichi11.com/netbeans/netbeans-111-release-and-l10n#comments Wed, 31 Jul 2019 15:00:08 +0000 https://junichi11.com/?p=5048

NetBeans 11.1がリリースされました。今回はApacheのトップレベルプロジェクトになってから最初のリリースです。また、インストーラーも利用可能になりました。

新機能

新機能とダウンロードについては下記を参照してください。主にJavaの機能の改善が行われています。インストーラーのリンクもそこにあります。

リリースサイクル

4月から新しいリリースサイクルのもと開発が行われています。詳細は下記を参照してください。

四半期ごとに新しいバージョンがリリース(major.0, 1, 2, 3: e.g. 11.0, 11.1, 11.2, 11,3)されます。ただし、マイナーバージョンが1,2,3のリリースは、次のメジャーバージョンのための機能追加のリリースです。これらのリリースはNetCATによるテストが行われません。安定性にかける部分があるかもしれませんが、これによって、バグの修正や新機能の追加が早くなります。

日本語化

翻訳のファイルは既にOracleからApacheに寄贈されているのですが、残念ながら、ライセンスの変更等の作業があまり進んでいません。

非公式での提供になりますが、日本語化用のnbmを公開しました。使用に関しては自己責任になりますが、日本語化したい方は、下記のリンクからnbmをダウンロードしてインストールしてみてください。もし、動作がおかしくなるようであればアンインストールしてください。

注:OracleのときのNetBeansの翻訳ファイルなので、Apacheで新規に開発された部分の翻訳はありません。

NetBeans 11.2

次のバージョンのNetBeans 11.2では、PHP 7.4をサポートします。既にmainリポジトリにマージ済みなので、開発版で試すことが出来ます。

]]>
https://junichi11.com/netbeans/netbeans-111-release-and-l10n/feed 17
はじめてのNetBeans Plugin 開発 https://junichi11.com/netbeans/netbeans-plugin-development https://junichi11.com/netbeans/netbeans-plugin-development#respond Sun, 02 Jun 2019 14:11:47 +0000 https://junichi11.com/?p=4786

NetBeansのプラグインの作り方を簡単に紹介します。

NetBeans Moduleプロジェクトの作成

NetBeansのプラグインはmoduleという単位でNetBeans本体に追加できます。NetBeans本体もプラグインと同じmoduleが集まって構成されています。

moduleのプロジェクトの作成方法は2通りあります。違いはビルドツールで、1つはAnt、もう1つはmavenです。NetBeans本体はAntプロジェクトでつくらていますが、モダンなツールはmavenです。どちらでつくっても動作は同じですが、外部のライブラリなどを使って開発したい場合は、mavenのプロジェクトを使ったほうが管理が楽だと思います。

Ant プロジェクトの作成

[File]メニュー[New Project…] をクリックして、New Project ウィザードを開きます。Categories: Java with Ant > NetBeans Modules、Projects: Moduleを選択して、[Next]ボタンを押します。

プロジェクト名を入力して、[Next]ボタンを押します。

Code Name BaseとModule Display Nameを入力して[Finish]ボタンを押すと、プロジェクトが作成されます。

Maven プロジェクトの作成

Antプロジェクトの時と同様に、New Project ウィザイードを開き、Categories: Java with Maven、Projects: NetBeans Moduleを選択して、[Next]ボタンを押します。

必要な情報を入力して、[Finish]ボタンを押すとプロジェクトが作成されます。これらの情報はあとからpom.xmlファイルを修正して変更できます。NetBeans Version:はRELEASE82までしか選択できないので、pom.xmlでRELEASE110に変更しましょう。(バグ報告しました:https://issues.apache.org/jira/browse/NETBEANS-2628

以下、Antプロジェクトを使って説明しています。

コーディング(Actionの追加)

NetBeansにはplugin(module)用のコードのテンプレートが用意されています。用意されているものに関してはウィザードに従って値を入力していくと、コードが自動で生成されます。ここでは、例としてActionを追加する方法を紹介します。

エディタで選択された文字列をHTML Entity Numberに変換するアクションを追加してみましょう。

ファイルを追加したいパッケージを選択して、[File]メニューの[New File]をクリックします。New Fileダイアログが表示されるので、Categories: Module DevelopmentFile Types: Actionを選択して[Next]をクリックします。

特定の条件でアクションを実行するようにもできますが、ここでは常に有効なアクションでつくってみましょう。Always Enabled を選択して[Next]をクリックします。

次にアクションをどこに追加するのかを設定します。以下のように設定して[Next]をクリックします。ここでは[Edit]メニューの一番最初にアクションを追加します。

  • Category: Edit
  • Global Menu Item: チェックを入れる
  • Menu: Edit
  • Position: デフォルト(メニューの先頭)

最後にクラス名や表示されるアクション名を入力してFinishをクリックすると、ファイルが生成されます。ここでは、以下のように設定します。アイコンを表示したければ、16×16で制作してBrowseボタンから追加してください。

  • Class Name: ConvertToHtmlEntityNumberAction
  • Display Name: Convert To Html Entity Number

このような感じでファイルがつくられて、コードが生成されます。

実際に書いていかなければいけない部分は actionPerformed()の中身です。アクションが実行されたときにここが呼びだされます。

最初に、コンポーネントを取得し、エディタの文字列を取得します。ここでは最後にフォーカスされたエディタのコンポーネントを取得して、文字列を変換することにします。

コンポーネントを取得するために下記のメソッド(EditorRegistry.lastFocusedComponent())を呼び出します。

public void actionPerformed(ActionEvent e) {
    EditorRegistry.lastFocusedComponent();
}

このままでは、赤のアンダーラインが表示されて、エラーになります。moduleの依存関係を追加する必要があります。追加する方法は次の3つです。

  • Project Propertiesから追加する
  • ヒント([Alt] + [Enter]/エディタのライン番号のバルブをクリック)から追加する
  • プロジェクトツリーのLibrariesから追加する

Project Propertiesから追加する

プロジェクトのノードを右クリックしてPropertiesをクリックします。

Project Propertiesダイアログが表示されます。Librariesを選択してModule DependenciesのAddボタンをクリックします。

Add Module Dependenciesダイアログが表示されます。 Filterのテキストフィールドにテキストを入力すると、関係するmoduleの一覧が表示されるので必要なものを追加します。ここではEditorRegistryと入力して、Editor Library 2を追加します。これでエラーがなくなるはずです。もしエラーが出ている場合は、import文が不足していないか確認してください。不足している場合は[Ctrl] + [Shift] + [I]で追加されます。

ヒント([Alt] + [Enter]/エディタのライン番号のバルブ)から追加する

エディタのライン番号のところにバルブのアイコンが表示されている場合は、ヒントの機能を利用できます。[Alt] + [Enter] もしくはバルブのアイコンをクリックします。Search Module Dependency for **** を選択([Enter]/クリック)するとProject Propertiesから追加したときと同じAdd Module Dependencyダイアログが表示されるので、そこでmoduleを選択して追加できます。

プロジェクトツリーのLibrariesから追加する

プロジェクトツリーのLibrariesを右クリックして、Add Module Dependency… をクリックしても同様に追加できます。

コードの続きを書いていきます。Html Entity Numberに変換するメソッドを追加します。ここでは、アルファベット等を変換しない等の処理は入れずに、単純に全部の文字を変換するメソッドにしています。つまり、全て”&#nnnn;” の形式に変換します。

    static String convertToHtmlEntityNumbers(String string) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i &amp;amp;amp;lt; string.length(); i++) {
            sb.append(String.format("&amp;amp;amp;amp;#%d;", Character.codePointAt(string, i)));
        }
        return sb.toString();
    }

actionPerfomed()の残りも書きます。選択されたテキストを取得して、変換して、documentに挿入するようにします。

補足:メソッド呼び出しの結果を変数に代入したい場合は、[Alt] + [Enter] でヒントを表示して、[Assign Return Value To New Variable]を選択すると、変数に代入するコードを追加してくれます。

    @Override
    public void actionPerformed(ActionEvent e) {
        JTextComponent editor = EditorRegistry.lastFocusedComponent();
        if (editor == null) {
            return;
        }
        String selectedText = editor.getSelectedText();
        if (selectedText == null) {
            return;
        }

        // convert selected text
        String convertedText = convertToHtmlEntityNumbers(selectedText);

        int selectionStart = editor.getSelectionStart();
        int selectionEnd = editor.getSelectionEnd();
        int length = selectionEnd - selectionStart;
        Document document = editor.getDocument();
        try {
            // remove and insert converted text
            document.remove(selectionStart, length);
            document.insertString(selectionStart, convertedText, null);
        } catch (BadLocationException ex) {
            Exceptions.printStackTrace(ex);
        }
    }

補足ですが、documentの文字列を削除して変換された文字列を挿入している部分は、NetBeansの履歴では削除と挿入として残ります。つまり「戻る」を実行したときに一旦、削除後の状態に戻り、さらに「戻る」を実行すると元の状態に戻ることになります。ドキュメントの複数の操作を1つの履歴として扱いたい場合は、NbDocument(https://bits.netbeans.org/dev/javadoc/org-openide-text/org/openide/text/NbDocument.html)のrunAtomicUser()もしくはrunAtomic()メソッドを使います。

全体のコードは以下のようになります。

package com.junichi11.my.netbeans.plugin;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.JTextComponent;
import org.netbeans.api.editor.EditorRegistry;
import org.openide.awt.ActionID;
import org.openide.awt.ActionReference;
import org.openide.awt.ActionRegistration;
import org.openide.util.Exceptions;
import org.openide.util.NbBundle.Messages;

@ActionID(
        category = "Edit",
        id = "com.junichi11.my.netbeans.plugin.ConvertToHtmlEntityNumberAction"
)
@ActionRegistration(
        displayName = "#CTL_ConvertToHtmlEntityNumberAction"
)
@ActionReference(path = "Menu/Edit", position = 100)
@Messages("CTL_ConvertToHtmlEntityNumberAction=Convert To Html Entity Number")
public final class ConvertToHtmlEntityNumberAction implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        JTextComponent editor = EditorRegistry.lastFocusedComponent();
        if (editor == null) {
            return;
        }
        String selectedText = editor.getSelectedText();
        if (selectedText == null) {
            return;
        }

        // convert selected text
        String convertedText = convertToHtmlEntityNumbers(selectedText);

        int selectionStart = editor.getSelectionStart();
        int selectionEnd = editor.getSelectionEnd();
        int length = selectionEnd - selectionStart;
        Document document = editor.getDocument();
        try {
            // remove and insert converted text
            document.remove(selectionStart, length);
            document.insertString(selectionStart, convertedText, null);
        } catch (BadLocationException ex) {
            Exceptions.printStackTrace(ex);
        }
    }

    static String convertToHtmlEntityNumbers(String string) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i &amp;amp;amp;lt; string.length(); i++) {
            sb.append(String.format("&amp;amp;amp;amp;#%d;", Character.codePointAt(string, i)));
        }
        return sb.toString();
    }
}

実行

コードを書き終えたら、実行してみましょう。実行する方法は下記のようにいくつかあります。好きなところから実行してください。

  • [Run]メニューの[Run Project]
  • ツールバーの[Run Project]ボタン
  • プロジェクトのコンテキストメニューの[Run]
  • デフォルトのショートカットキーの[F6]

実行するともう1つNetBeansが初期設定の状態で起動します。この起動したNetBeansの中でプラグインが有効になっています。作ったアクションは、最初に[Edit]メニューに登録したので、そこに[Convert To Html Entity Number]があるはずです。

実際にテキストを選択して、アクションを実行してみます。

ユーザーディレクトリ(オプションなどの設定があるディレクトリ)は、本体とは別に各プラグインごとにつくられます(build/testuserdir)。プロジェクトのコンテキストメニューから[Clean]を実行するとこれらは初期化されます。

うまく動かなかったりする場合は、デバッグしてみましょう。

デバッグ

デバッグする方法も実行するときと同様で、下記の場所からデバッグを開始できます。

  • [Debug]メニュー[Debug Project]
  • ツールバーの[Debug Project]ボタン
  • プロジェクトのコンテキストメニューの[Debug]
  • デフォルトのショートカットキーの[Ctrl] + [F5]

ブレークポイントはライン番号をクリックすると有効/無効の切り替えができます。

nbm

プラグインを配布・インストールするには、拡張子がnbmのファイルが必要です。

nbmを生成

プラグインはnbmファイルを生成して、それをインストールすることで有効になります。プロジェクトを右クリックして、[Create NBM]を実行してください。問題がなければ、Output ウィンドウでBUILD SUCCESSFULが表示されます。nbmファイルはbuildディレクトリ内につくられます。

nbm(プラグイン)のインストール

インストールは、[Tools]メニュー[Plugins]から行います。[Tools]メニューの[Plugins]をクリックすると、Pluginsダイアログが表示されます。[Downloaded]タブ[Add Plugins…]ボタンを押して、生成したnbmファイルを選択します。他のプラグインをダウンロードしてきたときも同様です。

[Install]ボタンを押すと、ライセンスの確認等があるので、[I accept the terms in all of the license agreements.]にチェックを入れて[Install]を押して、途中の警告も[Continue]すれば、インストールできます。

ライセンスファイルを追加していないと上のような表示になるので、正しいライセンスファイルを追加しておきましょう。(下のプロジェクトの設定を参照)

nbm(プラグイン)の配布

プラグインを配布する方法は下記のようにいくつかあります。

  • Plugin Portalに登録する
  • GitHubのリポジトリのreleasesにアップロードする
  • 独自のアップデートセンターをつくる

Plugin Portalに登録する

Plugin Portalに登録するには、最初にアカウントを作成して、nbmファイルをアップロードします。

NetBeans 本体のPluginsダイアログのAvailable Pluginsに表示されているプラグインは、Plugin Portalに登録されているものですが、登録したものすべてが表示されるわけではありません。

Available Plugins の一覧に表示されるようにするためには、nbmファイルに署名する(sign)必要があります。署名の方法についてはこちら (https://netbeans.apache.org/wiki/DevFaqSignNbm.asciidoc) を参照してください。

git等でバージョン管理している場合は、nbproject/private ディレクトリをignoreするようにしてください。(mavenプロジェクトの場合はkeystoreファイルがignoreされるようにしてください。)

GitHubのリポジトリのreleasesにアップロードする

たとえば、https://github.com/junichi11/netbeans-rainbow-braces/releases のようにgitでバージョンのタグをつくって、そこにnbmファイルをアップロードします。

独自のアップデートセンターをつくる

これに関しては省略しますが、特定のURLをNetBeansに登録してもらって、ダウンロードしてもらうこともできます。

テスト

ユニットテストも追加しておきましょう。(JUnitに関する詳細はおぐぐりください)このままだとactionPerformed()メソッドは、JTextComponentをテスト時に取得できないので、スタブをつくってテストできるように、ConvertToHtmlEntityNumberActionクラスのfinal修飾子を削除して、getComponent()メソッドを導入します。以下のコードの部分をメソッドにします。

(※このコードの場合だと上に書いたようにしなくても、actionPerformed(ActionEvent event, JTextComponent component) メソッドを作って、それをactionPerformed(ActionEvent event)から呼び出すようにして、その追加したメソッドをテストすればよさそうです。)

JTextComponent editor = EditorRegistry.lastFocusedComponent();

選択範囲のコードをメソッドにしたい場合は、範囲を選択した状態で、[Alt] + [Enter] でヒントを表示して、メソッドを導入できます。ポップアップウィンドウの項目で[Introduce Method…] (これはNetBeansのリファクタリングの機能です)というのを選択します。

Introduce Method ダイアログが表示されます。NameとAccessを適切に設定してOkボタンを押すと、メソッドが追加されます。

冗長であれば必要に応じて、メソッドの中身を修正します。

テストファイルの作成

テストファイルは、[Tools]メニュー[Create/Update Tests]から作れます。

Create/Update Tests ダイアログが表示されます。必要に応じて変更して(Method Bodyなどいらなければチェックをはずします)OKボタンをクリックすると、テストファイルが作成されます。

コードを書かなければいけないのは、test****()メソッドのbodyです。各メソッドのテストを書きます。ここでは testActionPerformed() のコードを書いていきましょう。

最初にConvertToHtmlEntityNumberActionを継承したテスト用のクラスをConvertToHtmlEntityNumberActionStub を作ります。

    private static final class ConvertToHtmlEntityNumberActionStub extends ConvertToHtmlEntityNumberAction {
        
    }

getComponent()メソッドをオーバーライドしてテストのデータを変更できるようにしましょう。

メソッドをオーバーライドするにはInsert Code([Alt] + [INS])の機能を使う方法もありますが、1つだけオーバーライドしたい場合は、コード補完からオーバーライドする方法が速いです。クラス内でコード補完のポップアップウィンドウを表示します([Ctrl] + [Space])。項目の中からgetComponent() – overrideを選択すると、メソッドが挿入されます。

以下のようにテストを追加してみました。未実装のテストメソッドや足りないテストケースは追加してみてください。

package com.junichi11.my.netbeans.plugin;

import javax.swing.JEditorPane;
import javax.swing.text.JTextComponent;
import org.junit.After;
import org.junit.AfterClass;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class ConvertToHtmlEntityNumberActionTest {

    public ConvertToHtmlEntityNumberActionTest() {
    }

    @Test
    public void testConverToHtmlEntityNumbers() {
        // TODO add 
    }

    @Test
    public void testActionPerformed() {
        testActionPerformed("@ほげほげテスト", "@ほげほげテスト", 0, 0);
        testActionPerformed("@ほげほげテスト", "&amp;#64;ほげほげテスト", 0, 1);
        // TODO add more tests
    }

    private void testActionPerformed(final String original, final String expectedResults, final int selectionStart, final int selectionEnd) {
        ConvertToHtmlEntityNumberAction action = new ConvertToHtmlEntityNumberActionStub(original);
        JTextComponent component = action.getComponent();
        component.setSelectionStart(selectionStart);
        component.setSelectionEnd(selectionEnd);
        action.actionPerformed(null);
        assertEquals(expectedResults, component.getText());
    }

    private static final class ConvertToHtmlEntityNumberActionStub extends ConvertToHtmlEntityNumberAction {

        private final JTextComponent editor;

        public ConvertToHtmlEntityNumberActionStub(String text) {
            this.editor = text != null ? new JEditorPane("text/plain", text) : null;
        }

        @Override
        JTextComponent getComponent() {
            return editor;
        }

    }

}

テストの実行

テストもプロジェクトの実行の時と同様に実行する方法はいくつかあります。

エディタのコンテキストメニュー(右クリック)

  • [Run File]([Shift] + [F5])
  • [Test File]([Ctrl] + [F6])

[Run] メニュー

  • [Run File]([Shift] + [F5])
  • [Test File]([Ctrl] + [F6])
  • [Test Project]([Alt] + [F6]) (すべてのテスト)

プロジェクトツリーのコンテキストメニュー

ファイル([Test File])だったり、パッケージ([Test Package])だったり、プロジェクト([Test])だったり、選択中のノードによってテストの対象が変わります。

プロジェクトのコンテキストメニューから[Test]を実行してみましょう。テストが成功すればグリーンの表示結果になります。

失敗した場合は、進捗バーがレッドになります。テストが間違ってなければ、実装を修正しましょう。

NbTestCase

別のディレクトリにテストデータを用意しておいて、それらを使ってテストするときなどは、テストクラスにNbTestCase(エラーがでたら依存関係の修正)を継承させて使うと便利だと思います。コンストラクタに引数があるので注意。

Loggerの追加

例外が発生する場合は、処理を正常に終了させ、どこで問題が起きたのかLoggerを追加してログを残しましょう。特定のクラス用のLoggerは、Insert Code([Alt] + [INS])の機能でコードを生成できます。クラス内でInsert Code([Alt] + [INS]) を実行して[Logger…] を選択します。

キャレット位置にコードが生成されます。

ここでは Exceptions.printStackTrace(ex); の部分をLoggerに置き換えてみましょう。よりよいメッセージがあれば、メッセージ部分を変更してください。

        try {
            // remove and insert converted text
            document.remove(selectionStart, length);
            document.insertString(selectionStart, convertedText, null);
        } catch (BadLocationException ex) {
            // Exceptions.printStackTrace(ex);
            LOG.log(Level.WARNING, "Incorrect offset: " + ex.offsetRequested(), ex);
        }

プロジェクトの設定(バージョン等)

プロジェクトのPropertiesでJavaのバージョンやプラグインのバージョン等を設定できます。moduleの依存関係を追加したときと同様に、プロジェクトのコンテキストメニューで[Properties]を選択します。通常必要と思われる部分だけ紹介します。以下AntのプロジェクトのProject Propertiesのダイアログです。

Mavenのプロジェクトを作った場合は、Antの場合とProject Propertiesの項目が異なる部分があります。

Sources

Source Level はJavaのバージョンです。これはヒント等に使用されます。例えば、Java 8からラムダ式を使用できますが、Source Levelを1.7にしておくと、ラムダ式を使っている箇所ではエラー表示されます。また、Source Levelを1.8にしておくと、ラムダ式が使える箇所では、ラムダ式に変更できるよと提案のヒントが表示されます。使いたいJavaのバージョンの文法でエラーになる場合は、ここの設定を確認してみてください。

Display

基本的には、プラグインをインストールする時等に、プラグインの情報として表示されます。

API Versioning

プラグインのバージョンを変更したい場合は、Specification Version を変更してください。プラグインを修正して、新しいバージョンを配布するときは、忘れずにバージョンを変更しましょう。たとえ中身が違っていても、バージョンの情報が同じなら、すでにそのバージョンはインストールされているものとみなされ、プラグインを更新するために、一度インストール済みのプラグインを削除しなければなりません。

Build Packaging

プロジェクト内にライセンスファイルを作って、適切なライセンスを設定しましょう。(例えば、https://github.com/junichi11/netbeans-rainbow-braces を参照)Home Pageには、ソースコードのリポジトリのアドレス等を設定するといいかと思います。

ライセンスヘッダー

ライセンスヘッダーの設定をしていない場合、新規にファイルを作成すると、ファイルの先頭に下記のコメントが追加されます。

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

ファイルはテンプレートを使用して作成されています。どのライセンスを使用するか設定しておくと、このコメントの部分に適切なライセンスヘッダーが挿入されるようになります。

Mavenのプロジェクトの場合はProject Propertiesにライセンスヘッダーを設定できるカテゴリーがあるのですが、Antのプロジェクトにはそれがありません。

その場合は、nbproject/project.propertiesファイルを編集します。

既存のライセンステンプレートを使用する

project.propertiesファイルを開いて、project.license=[license name] を追加してください。例えば、Apache License, Version 2.0を使用したい場合は下記のように書きます。

project.license=apache20

この[license name]の部分は、デフォルトのライセンスのテンプレートのファイル名で決まります。既存のテンプレートのファイル名は license-[license name].txt の形式になっています。この[license name]をproject.licenseに使用できます。ファイル名は、[Tools]メニュー[Templates]からTemplate Managerダイアログを開いて、Licensesの特定のライセンスを右クリックして、Propertiesから確認できます。

独自のライセンステンプレートを使用する

project.propertiesファイルを開いて、project.licensePath=[path to the license template file]を追加してください。例えば下記のように書きます。

project.licensePath=./nbproject/licenseheader.txt

リファレンス

英語ですが下記のチュートリアル動画やWikiが参考になると思います。わからないことや質問があれば、メーリングリストやSlackで聞いてみてください。また、あれはどうやって取得するんだろうと思うことがあれば、NetBeans本体のコードをありそうなメソッド名などでgrepしてみるのも1つの方法です。例えば、getFileObjectなど。

さらなる改善?

これを読んで実際に実行してみる人はいないかもしれませんが、もしいましたら、次のような機能の追加・改善が考えられるので、それらを実装してみるのも練習になると思います。

  • 逆の変換の(元の文字列に戻す)アクションを追加する
  • 特定の文字は変換の対象からはずす
  • このプラグインのためのオプションを追加する
  • 文字列が選択されていなかったときに、ダイアログでメッセージを表示する
  • 変換するstaticメソッド(convert***)をUtilitiesクラスを作って、そちらに移動する
  • ActionListenerではなくEditor用のActionを使って実装・登録してみる
  • アクション用のアイコンを追加する
  • などなど

長々と書いて、クソコードだったりする部分もあるかもしれませんが、もし何かありましたらご指摘いただけると助かります。

NetBeansとプラグインの作成に興味をもってくれた人がいれば幸いです。

]]>
https://junichi11.com/netbeans/netbeans-plugin-development/feed 0
NetBeans 10.0のリリース https://junichi11.com/netbeans/netbeans-10-release https://junichi11.com/netbeans/netbeans-10-release#comments Sun, 30 Dec 2018 11:44:43 +0000 https://junichi11.com/?p=4548

予定より1ヶ月と少し遅れてしまいましたが、NetBeans10.0がリリースされました。

ダウンロードや追加された機能の詳細は下記のアナウンスを確認してください。

リリースが遅れた原因は、ライセンスの問題等があったためです。

NetBeans 9.0 では、JavaSE関連の機能のみでしたが、NetBeans 10.0では、JavaScript, Groovy, PHPの機能がデフォルトで追加されました。

インストーラーはまだ寄贈されていなかったので、起動は直接、起動ファイルを実行する必要があります。現在、インストーラーも寄贈済みなので、うまく行けば、次回のリリースからインストーラーを提供できるかもしれません。

今回、私は主にPHPの新機能の追加やバグの修正、ライセンスの変更を行いました。NetBeans8.2以降、Apacheへの寄贈に時間がかかってしまい、最新のPHPのバージョンに対応できていませんでした。PHP7.3のリリースより少し遅れてしまいましたが、なんとか最新のPHPのバージョンへの最低限のサポートは追加できたかなと思います。

それから、日本語のsignature ファイルもNetBeans 10用に更新しています。新しいジェネレーターで生成したので、以前よりも多くの補完が効くようになってると思います。ジェネレーターはTomas(OracleのNetBeansのときのPHPの機能の開発者の1人)がスクラッチからつくってくれて、私はバグの修正や未実装部分の追加などを手伝いました。PHPマニュアルから生成しているので、ライセンスは CC-BY-3.0です。このライセンス以外で公開されている同様のファイルもありますが、もしかするとそれらは正しくないライセンスかもしれません。

なにか問題やリクエストなどがありましたら、JIRAへ登録をお願いします。私にできそうなものであれば取り組みます。英語で報告が難しければ、slackやtwitterでもかまいません。(実際にslackのコメントからPHPのヒントの改善やエディターのタブのソートを実装しました。)

次回のリリースは、ライセンスの変更が終わっていれば Jakarta EE/Java EE の機能の追加です。(Java関係のモジュールはGPL系のライセンスが含まれていることがあるので、時間がかかりがちです。)C/C++はソースコードもまだなので、もう少し時間がかかりそうです。

 

]]>
https://junichi11.com/netbeans/netbeans-10-release/feed 1
NetBeans: Apache NetBeans のビルド https://junichi11.com/netbeans/apache-netbeans-build https://junichi11.com/netbeans/apache-netbeans-build#respond Sun, 05 Aug 2018 23:38:11 +0000 https://junichi11.com/?p=4522

Apache NetBeans のGitHubのリポジトリで2ndDonation ブランチが masterブランチにマージされました。2ndDonationブランチには、JavaEE、JavaScript、Groovy、PHPなどの機能が含まれていました。まだ、リライセンスの作業があり、9.0もでたばかりなので、すぐにはこれらを含めたものをリリースできません。そこで、自分でNetBeans をビルドして使う方法を紹介します。

GitHubからリポジトリをクローンする (Clone the repository from GitHub)


$ git clone [email protected]:apache/incubator-netbeans.git

ビルドする (Build)

$ cd incubator-netbeans
$ ant -Dcluster.config=full 

または使いたいものだけ。 例えば、PHPの場合は、(Or Only features which you want to use. e.g. in the case of PHP,)


$ ant -Dcluster.config=php

起動する (Run)

起動用のファイルはnbbuild/netbeans/bin にあるのでそれを実行します。(You can find the start-up files in the nbbuild/netbeans/bin directory. So just run it.)

試しに起動するだけなら、下記を実行します。(If you just would like to try to run it, run the following command.)


$ ant tryme

これでPHP等の機能も使えるようになっているはずです。(PHP, JavaEE e.t.c. features should be available.)

翻訳について

まだ翻訳部分のコードが寄贈されていないため、日本語化はできません。

もうすぐ翻訳の部分のコードの寄贈も行われる予定です。

不具合等 (Issues)

もし何か問題を見つけた場合は、https://issues.apache.org/jira/projects/NETBEANS/issues に報告をお願いします。(If you find issues, please report them to https://issues.apache.org/jira/projects/NETBEANS/issues .)

 

]]>
https://junichi11.com/netbeans/apache-netbeans-build/feed 0