NetBeans 7.x
2010.3.30より、ヒットになります。
注)現在、NetBeans 7.2用に手直し作業をしています。そのため、記述がところどころ7.2、7.1、7.0と混在しています。
Oracle(旧Sun)が開発するJavaプログラム統合開発環境。Eclipseに比べて存在感が薄い感がありますが、歴史はEclipseより古く、最近は性能向上・機能強化も進みEclipse並みからEclipseを超えるところに来ています。特質すべき点は、GUIデザイン機能、Java EEアプリケーションサーバ連携、プロファイラ、Java ME開発環境、バージョン管理ツールとの連携(CVS/Subversion/Mercurial/Git)です。日本語化を含めて最初から必要な機能が入っているので、初期導入も容易です。
ただし、Eclipseにも強みがあり、OSGiの標準フレームワークを基盤としており商用ツールが各種Eclipse向けに開発されている点や、ユーザー層の厚みなどは比べ物にならないです。
個人的には、NetBeansとEclipseとは適材適所で使い分ければいいじゃないかと思っており、特にどちらかへのこだわりはありません。(というものの、非適所に使われることには異論はありますが)
NetBeansに関する日本語情報源を集めてみました。
NetBeans 6.0以降の解説記事です。NetBeansをインストールすると、[ヘルプ]メニュー→[チュートリアル]に解説記事がありますのでそちらも活用するとよいでしょう。
NetBeans 7.2は、使用用途毎に必要なパッケージを組み合わせて構成されています。
英語版の他、日本語を含む各国語へのローカライズが行われております。
NetBeansのホームページ(日本語はこちら)から、[Download FREE]アイコンをクリックし、IDEの言語欄で「日本語」(またはお好みの言語)を選択し、プラットフォーム欄で、インストールしたいOS(Windows、Linux(x86/x64)、Solaris(x86/x64)、Solaris(sparc)、MacOS X)を選択します。
使いたい構成を選んで[ダウンロード]アイコンをクリックします。
微妙な按配です。Java以外にも、GroovyやPHPを少しでも触ってみようと思うとすべて版をダウンロードしてしまった方がよいかもしれません。
†1 標準プラグインに含まれてないだけで非対応というのなら、Eclipseは日本語非対応、Subversion非対応になってしまいます。
†2 JUnitのライセンスであるCPLの条項7には、CPLライセンスのソフトウェア利用者に対する特許訴訟上の大きな制約(不利益といってもいい)を課するもののようです。Oracleは、顧客の不利益を懸念しての対応をしていると思います。
参考URL:https://www.myeclipseide.jp/blog/2009/03/epl-cpl.html
公式インストール手順のページ(日本語)
NetBeans 7.2 Java SE版をWindows 7 64bit環境へインストールする手順について、別ページ(工事中)で紹介しています。
インストール方法は、上述の公式インストール手順のページに記載されています。
まず、「すべて版」をインストールすることとし、日本語版として以下のインストールファイルをダウンロードします。
netbeans-7.2-ml-windows.exeを実行すればインストーラが起動します。デフォルトでは、Apache Tomcatサーバがインストールされないので、[カスタマイズ]ボタンを押して、[Apache Tomcat 7.0.22]にチェックを付けます。
[次へ]ボタンを押し、使用許諾契約書を読み了解すれば[ライセンス契約条件に同意する]をチェックし、[次へ]ボタンを押します。
NetBeans IDEのインストール先とNetBeans IDE用のJDKを選択します。Windows版のNetBeansは32bit版のみなので、ここでインストールする先および使用するJDKは32bit版を選択します。64bit Windowsでの一例を以下に示します。
NetBeans IDEのインストール先(I): C:\Program Files (x86)\NetBeans 7.2 NetBeans IDE用のJDK (J): C:\Program Files (x86)\Java\jdk1.7.0
Windows 7 64bit版では、32bitアプリのインストール先に C:\Program Files (x86)、64bitアプリのインストール先にC:\Program Files が適用されます。
[次へ]ボタンを押します。GlassFishのインストール先を問い合わせてくるので、そのままデフォルトのディレクトリにインストールします。
GlassFishのインストール先(I): C:\Program Files\glassfish-3.1
[次へ]ボタンを押します。Apache Tomcatのインストール先を問い合わせてくるので、そのままデフォルトのディレクトリにインストールします。
Apache Tomcatのインストール先(I): C:\Program Files\Apache Software Foundation\Apache Tomcat 7.0.22
[次へ]ボタンを押します。NetBeans IDE、GlassFish、Tomcatのインストール先確認画面が表示されるので、了解すれば、[インストール]ボタンを押します。
アンインストールは、OSのコントロールパネル−プログラムの追加と削除から行えるようになっています。
まとめると次の項目
NetBeans 7.1で追加のオプション
「NetBeansのWindows版はフォントが汚いので使う気がしない」と言われる所以ですが、それはWindows OS側の問題が多分にあります。汚いといわれているのは日本語フォントです。WindowsはVistaから、アンチエイリアスを前提としたメイリオフォントが導入されましたが、OSが使用する基本フォントは互換性の問題もあり、従来どおりMS UI Gothicです。NetBeansをWindows上で起動すると、OSの使用するフォントを取得して表示するので、MS UI Gothicが適用されます。MS UI Gothicはフォントサイズが小さいときはClearTypeを有効にしていてもビットマップ表示されるため、ぎざぎざとなってしまいます。
OSが使用する基本フォントをメイリオに変えることもできますが、メイリオとMS UI Gothicではフォントメトリクスが異なるため、MS UI Gothicでサイズを決め打ちで作られたGUIアプリケーションは大抵表示が崩れ(画面に収まらないボタン等が出る)、大きな不都合が生じます。
Java(JDK)側で、使用するフォント設定を変更することで、そのJDK上で実行するJavaアプリケーションのフォントを制御することができます。NetBeansは、Java(JDK)上で動くアプリケーションなので、今回その方法でフォント表示の改善をしてみます。
<JDKインストールディレクトリ>\jre\lib ディレクトリにある、fontconfig.* がJDKのフォント設定ファイルとなります。
NetBeansが使用するJDKは、<NetBeansインストールディレクトリ>\etc\netbeans.conf ファイルに記載されています。
# Default location of JDK, can be overridden by using --jdkhome <dir>:
netbeans_jdkhome="D:\Program Files (x86)\Java\jdk1.6.0"
上記の場合、D:\Program Files (x86)\Java\jdk1.6.0\jre\lib ディレクトリにフォント設定があります。
D:\>dir "D:\Program Files (x86)\Java\jdk1.6.0\jre\lib"\fontconfig*
2010/07/13 22:54 2,710 fontconfig.98.bfc
2010/07/13 22:54 7,603 fontconfig.98.properties.src
2010/07/13 22:54 3,478 fontconfig.bfc
2010/07/13 22:54 9,768 fontconfig.properties.src
D:\>
JDKのドキュメント「機能ガイドー国際化ーフォント構成ファイル」に説明があります。
最初の2つ(fontconfig.98.*)は、Windows 98で適用されるものです。それ以外のWindows OSでは、fontconfig.bfcが設定として利用されます。fontconfig.bfcはバイナリ形式で、fontconfig.properties.srcから生成されたものと思われます。フォント設定を変更するには、fontconfig.properties.srcをfontconfig.propertiesの名前にコピーし、fontconfig.propertiesを編集します。
上記ドキュメントの説明では、fontconfig.propertiesとfontconfig.bfcのファイルがある場合、前者が優先されると記載されています。(動作を要確認)
日本語フォントをメイリオに設定する
1) MS Gothic を Meiryo に変更します。
sansserif.plain.japanese=MS Gothic sansserif.bold.japanese=MS Gothic sansserif.italic.japanese=MS Gothic sansserif.bolditalic.japanese=MS Gothic monospaced.plain.japanese=MS Gothic monospaced.bold.japanese=MS Gothic monospaced.italic.japanese=MS Gothic monospaced.bolditalic.japanese=MS Gothic dialog.plain.japanese=MS Gothic dialog.bold.japanese=MS Gothic dialog.italic.japanese=MS Gothic dialog.bolditalic.japanese=MS Gothic dialoginput.plain.japanese=MS Gothic dialoginput.bold.japanese=MS Gothic dialoginput.italic.japanese=MS Gothic dialoginput.bolditalic.japanese=MS Gothic
これらを
sansserif.plain.japanese=Meiryo sansserif.bold.japanese=Meiryo sansserif.italic.japanese=Meiryo sansserif.bolditalic.japanese=Meiryo monospaced.plain.japanese=Meiryo monospaced.bold.japanese=Meiryo monospaced.italic.japanese=Meiryo monospaced.bolditalic.japanese=Meiryo dialog.plain.japanese=Meiryo dialog.bold.japanese=Meiryo dialog.italic.japanese=Meiryo dialog.bolditalic.japanese=Meiryo dialoginput.plain.japanese=Meiryo dialoginput.bold.japanese=Meiryo dialoginput.italic.japanese=Meiryo dialoginput.bolditalic.japanese=Meiryo
に変更し、以下を最後に追加します。
filename.Meiryo=MEIRYO.TTC
メイリオは、日本語(全角)は等幅ですがASCII文字(半角)はプロポーショナルフォントとなっています。デフォルトではmonospacedフォントは以下のように、windows-31j環境ではjapaneseで指定したメイリオが優先されます。その結果、ASCII文字がプロポーショナルになってしまいます。そこで、優先順をjapaneseよりalphabeticを先になるように修正します。
つまり
sequence.monospaced.windows-31j=japanese,alphabetic,dingbats,symbol
を
sequence.monospaced.windows-31j=alphabetic,japanese,dingbats,symbol
に変更します。こうすると、monospacedのフォントがwindows-31jロケールでは、monospaced.plain.alphabetic=Courier New で指定したCourier Newフォントになります。日本語はCourier Newフォントにないので、次に優先されるmonospaced.plain.japanese=Meiryo が使われます。
ASCII文字をConsolasに設定する
上記のとおりデフォルトではCourier Newとなっている部分をConsolasに変更します。
monospaced.plain.alphabetic=Courier New monospaced.bold.alphabetic=Courier New Bold monospaced.italic.alphabetic=Courier New Italic monospaced.bolditalic.alphabetic=Courier New Bold Italic dialoginput.plain.alphabetic=Courier New dialoginput.bold.alphabetic=Courier New Bold dialoginput.italic.alphabetic=Courier New Italic dialoginput.bolditalic.alphabetic=Courier New Bold Italic
を
monospaced.plain.alphabetic=Consolas monospaced.bold.alphabetic=Consolas Bold monospaced.italic.alphabetic=Consolas Italic monospaced.bolditalic.alphabetic=Consolas Bold Italic dialoginput.plain.alphabetic=Consolas dialoginput.bold.alphabetic=Consolas Bold dialoginput.italic.alphabetic=Consolas Italic dialoginput.bolditalic.alphabetic=Consolas Bold Italic
に変更し、以下を追加します。
filename.Consolas=CONSOLA.TTF filename.Consolas_Bold=CONSOLAB.TTF filename.Consolas_Italic=CONSOLAI.TTF filename.Consolas_Bold_Italic=CONSOLAZ.TTF
日本語フォントをMeiryo UIに設定する
Windows 7に標準搭載のMeiryo UIに設定します。なお、Meiryo UIは、Windows Vistaでもアップデートが出ています。
Windows用JDK1.6.0 Update21のフォント設定をメイリオおよびConsolarsに修正したファイルと、これを適用したNetBeans画面のキャプチャです。 行間が広くなってしまい、同時に見れる行数が減り、ちょっと気に入りません。 |
fontconfig.properties | |
Windows用JDK1.6.0 Update21のフォント設定をMeiryo UIおよびConsolarsに修正したファイルと、これを適用したNetBeans画面のキャプチャです。 上記のメイリオよりも行間が狭まり、まずますです。 |
fontconfig.properties | |
Windows用JDK1.6.0 Update21のデフォルトのフォント設定と、そのNetBeans画面のキャプチャです。 MS ゴシックフォントが使われている部分はアンチエイリアスが適用されず、いまいちな表示になっています。 |
fontconfig.properties.src |
[ツール]メニュー→[オプション]でオプションダイアログが表示されるので、[フォントと色]アイコンを選択し、[構文]タブを選択します。言語欄で[すべての言語]を選択し、カテゴリ欄は未選択のまま、フォント欄の右にある[...]ボタンを押します。
フォント選択ダイアログが表示されるので、サイズ欄に指定したいポイント数を入力します。ポイント数の選択リストには、ポイント数が飛び飛び(3, 5, 8, 10, 12, 14, 18, ...)で表示されていますが、サイズ欄直下のテキスト入力欄に直接キーボードから数値を入力することができます。12ポイントでは少し大きいが10ポイントは小さすぎる場合、直接11を入力して[了解]ボタンを押します。
すると、オプションダイアログでフォント欄に、[Monospaecd 11]のように表示されます。[了解]を押して、Javaエディタの表示が変わったことを確認します。
Windows上でNetBeansを動かすと、Java/Swingのシステム・ルック・アンド・フィールであるWindowsLookAndFeelが適用されます。WindowsLookAndFeelは、上述のfontconfigの設定で変更可能な論理フォントではなく、物理フォント名(MS UI ゴシック)決め打ちのため、エディタ編集以外の箇所が汚いままとなります。
そこで、NimbusLookAndFeelや、その他論理フォントを使うサードパーティ製LookAndFeel、自分で作成したLookAndFeelなどに変更します。
LookAndFeelの変更方法は次の項目に記載します。
NetBeansは、Java/Swingで作成されているので、好みのルック・アンド・フィールを指定することで見栄えを変更することができます。
ルック・アンド・フィールの指定方法は、以下の2つがあります。
指定の書式は、以下です。
--laf <ルック・アンド・フィール・クラス名(FQCN)>
Java/Swingの標準搭載ルック・アンド・フィールの1つにNimbusLookAndFeelがあります。
コマンドライン・オプションに指定する
NetBeans IDE 7.2のショートカットでリンク先にオプションを追加します。
"C:\Program Files (x86)\NetBeans 7.0\bin\netbeans.exe" --laf Nimbus
NetBeans設定ファイルに記述する
netbeans.confファイルのnetbeans_default_options項目に追加します。
netbeans_default_options="-J-client -J-Xss2m -J-Xms32m -J-XX:PermSize=32m -J-XX:MaxPermSize=384m -J-Dsun.java2d.noddraw=true --laf Nimbus"
なお、デフォルトの設定ファイルにapple関係のプロパティ指定がありますが、Windowsでは無用なため削除しています。
画面サンプル
jgoodies looksで提供されるWindowsLookAndFeelは、Windows OSのルック・アンド・フィールを模擬しますが、フォント設定をシステムプロパティで変更することができます。そこで、これを使ってフォントをMS UIゴシックからメイリオ UIフォントに設定します。
NetBeans設定ファイルで指定する
netbeans.confファイルのnetbeans_default_options項目に追加します。
netbeans_default_options="-J-client -J-Xss2m -J-Xms32m -J-XX:PermSize=32m -J-XX:MaxPermSize=384m -J-Dsun.java2d.noddraw=true --cp:a C:\java\jgoodies-looks-2.4.1\jgoodies-looks-2.4.1.jar; C:\java\jgoodies-looks-2.4.1\lib\jgoodies-common-1.2.0.jar --laf com.jgoodies.looks.windows.WindowsLookAndFeel"
--cp:a オプションは、NetBeans実行時のクラスパスに追加(Append)するパスを指定します。複数パスを追加するときは、Javaのクラスパス指定方法と同じセパレータで区切ります。
JGoodies looksのWindowsLookAndFeelは、システムプロパティでフォントを指定することができます。
netbeans_default_options="-J-client -J-Xss2m -J-Xms32m -J-XX:PermSize=32m -J-XX:MaxPermSize=384m -J-Dsun.java2d.noddraw=true --cp:a C:\java\jgoodies-looks-2.4.1\jgoodies-looks-2.4.1.jar; C:\java\jgoodies-looks-2.4.1\lib\jgoodies-common-1.2.0.jar --laf com.jgoodies.looks.windows.WindowsLookAndFeel -J-DWindows.controlFont=\"Meiryo UI-plain-12\" -J-DWindows.menuFont=\"Meiryo UI-plain-12\""
画面サンプル
Java標準搭載のcom.sun.java.swing.plaf.windows.WindowsLookAndFeel のサブクラスを作成し、フォントを差し替えることで、カスタマイズする方法です。サンプルコードは以下です。
WindowsLookAndFeelのgetDefaultsメソッドをオーバーライドし、キー名が"font"で終わるリソースを、一律指定したフォントに置き換えています。
置き換えるフォントは、デフォルトでメイリオ 11ポイントにしていますが、システムプロパティでキーにwincustom.fontを指定し、値に、Meiryo UI-plain-12 のようにフォント名-修飾-サイズ の形式で指定することで、別なフォントを使用することができます。(JGoodies-looks の指定方法に合わせました)
コンパイル済みのJARファイルは以下です。
NetBeans設定ファイルで指定する
netbeans.confファイルのnetbeans_default_options項目に追加します。
netbeans_default_options="-J-client -J-Xss2m -J-Xms32m -J-XX:PermSize=32m -J-XX:MaxPermSize=384m -J-Dsun.java2d.noddraw=true --cp:a C:\java\lib\WinCustomLAF.jar --laf jp.gr.java_conf.torutk.laf.wincustom.WinCustomLookAndFeel -J-Dwincustom.font=\"Meiryo UI-plain-12\""
画面サンプル
Windows 7において、NetBeansのルック・アンド・フィールを、WinCustomLookAndFeelに指定した時の画面。 | ![]() |
メモ
JGoodies-Looksでいいと思いましたが、Windows Look And Feelでないと支障のでるケースがまれにあったので、そのようなときはこれを使うと回避できることがあります。
NetBeansはJava上で動くので、Javaの設定でのパフォーマンス調整が可能です。
Javaは、デフォルトでは(サーバーVMを除く)シングルスレッドの世代別GCを使用しているので、大きなプロジェクトを操作していると、GCによる停止時間("Stop
the world")が気になるかもしれません。(人間が気になるのは0.1-0.2秒くらいから?)
そこで、GCによる停止時間の最小化を追及しているConcurrent Mark and Sweep(CMS)というGCに切り替えます。パラメータは、デフォルトのnetbeans.confファイルにコメント化された状態で記載しているので、コピー&ペーストでパラメータに追加します。
netbeans.confに記載されているCMS用パラメータ
# If you specify the heap size (-Xmx) explicitly, you may also want to enable # Concurrent Mark & Sweep garbage collector. In such case add the following # options to the netbeans_default_options: # -J-XX:+UseConcMarkSweepGC -J-XX:+CMSClassUnloadingEnabled -J-XX:+CMSPermGenSwe epingEnabled # (see http://wiki.netbeans.org/FaqGCPauses)、
netbeans.confファイルのnetbeans_default_options項目に追加します。
netbeans_default_options="-J-client -J-Xss2m -J-Xms32m -J-XX:PermSize=32m -J-XX:MaxPermSize=384m -J-Dsun.java2d.noddraw=true -J-XX:+UseConcMarkSweepGC -J-XX:+CMSClassUnloadingEnabled -J-XX:+CMSPermGenSweepingEnabled"
注) CPU(コア)が1つの場合、並行GCを使うとかえって遅くなることもあるようです。
注) JDK6の後期バージョンおよびJDK7で新登場のG1GCはCMSの置き換えとして有望ですが、JDK6 u26でG1GCを使う設定でNetBeansを起動すると、途中でフリーズ状態になってしまいました。もうちょっと様子見かもしれません。
netbeans.confファイルのnetbeans_default_options項目に追加します。
netbeans_default_options="-J-client -J-Xss2m -J-Xms32m -J-XX:PermSize=32m -J-XX:MaxPermSize=384m -J-Dsun.java2d.noddraw=true -J-XX:+UseConcMarkSweepGC -J-XX:+CMSClassUnloadingEnabled -J-XX:+CMSPermGenSweepingEnabled -J-Xverify:none"
NetBeans起動時間が気持ち早くなるかも。
[ツール]メニュー→[オプション]でオプションダイアログが表示されるので、[キーマップ]アイコンを選択し、右側ペインのプロファイル欄で、デフォルトの"NetBeans"から"Emacs"に変更し[了解]ボタンを押します。
Javaエディタ上では文法に基づき予約語・識別子に色が付きます。ただし、デフォルトではメソッドのパラメータ(引数)とローカル変数は同じ色となっており区別がつきません。そこで、パラメータ(引数)にローカル変数とは別の色をつけます。
[ツール]メニュー→[オプション]でオプションダイアログが表示されるので、[フォントと色]アイコンを選択し、[構文]タブを選択します。言語欄で[Java]を選択し、カテゴリ欄で[パラメータ宣言]を選択、前景欄で指定したい色(例えば[マゼンダ])を選択します。
続いて、カテゴリ欄で[パラメータ用]を選択、前景欄で同じく指定したい色を選択します。
[了解]ボタンを押してJavaエディタ上でソースコードのパラメータの色が変更されたことを確認します。
デフォルトでは、ソースファイルの文字コードはUTF-8、改行コードはLF(0x0a)となっています。
ソースファイルの文字コードは、プロジェクト毎に指定可能です。、
改行コードはバージョン6.9(2010/7/18現在)では指定する方法がありません。以下バグデータベースにも登録されています。
NetBeansをインストールしたデフォルト状態で、新しいファイルを作成すると、ファイルの先頭にはデフォルトのコメントが生成されます。例えば、Javaクラスを新規作成した場合の例を以下に示します。
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package foo.bar;
コメントには、[ツール]→[テンプレート]を選び、テンプレートをエディタに開け、とあります。[ツール]メニューの[テンプレート]を選択すると、「テンプレートマネージャー」ダイアログが表示されます。テンプレート欄のツリー表示の中に、「ライセンス」があるので展開すると、以下が表れます。
デフォルトライセンスを選択し、[エディタで開く]ボタンを押すと、エディタ画面に以下が表示されます。
<#if licenseFirst??>
${licenseFirst}
</#if>
${licensePrefix}To change this template, choose Tools | Templates
${licensePrefix}and open the template in the editor.
<#if licenseLast??>
${licenseLast}
</#if>
Javaクラスを新規作成したときの内容が見受けられます。
[ツール]メニュー→[テンプレート]で「テンプレートマネージャー」を開き、今度は、テンプレート欄のツリー表示の中の「Java」を展開し、[Javaクラス]を選択し、[エディタで開く]ボタンを押します。
<#assign licenseFirst = "/*">
<#assign licensePrefix = " * ">
<#assign licenseLast = " */">
<#include "../Licenses/license-${project.license}.txt">
<#if package?? && package != "">
package ${package};
</#if>
/**
*
* @author ${user}
*/
public class ${name} {
}
ここで、#assignタグで指定された licenseFirst, licensePrefix, licenseLastが、デフォルトライセンスの${licenseFirst},
${licensePrefix}, ${licenseLast}に展開されているのが分かります。また、#includeタグで、license-${project.license}.txtを指定しています。したがって、project.licenseの定義を変えることで、ファイル先頭コメントとして取り込むファイルを切り替えることができます。
Javaクラスを新規作成したときに、Apache 2.0ライセンスをファイル先頭コメントとする場合は、以下のように設定します。
1) プロジェクトのプロパティファイル(project.properties)を開き、project.license=apache20 を選択します。
プロジェクトの[ファイル]タブを選択します。プロジェクトの下に、nbprojectフォルダがあるのでこれを展開します。中に、project.propertiesファイルがあるので編集のために開きます。ここに、以下を追記します。
project.license=apache20
保存して、新しいJavaクラスを作成すると、ファイル先頭コメントがApacheライセンスに変更されているのが分かります。
/*
* Copyright 2010 torutk.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* under the License.
*/
2) 著作権表示の名前をカスタマイズしたい
[ツール]メニュー→[テンプレート]で「テンプレートマネージャー」ダイアログを開き、テンプレート欄のツリー表示から[ユーザー構成プロパティー]を展開し、[User.properties]を選択し、[エディタで開く]ボタンを押します。[設定]ボタンを押します。エディタに"User.properties"ファイルが開くので、userとcampanyを設定することができます。
user=Jean-Luc Picard company=United Federation of Planets, Star Fleet
テキストエディタで、license-xxxxx.txt (xxxxxには任意の名前を入れる、project.propertiesで指定する文字列となる)を作成します。[ツール]メニュー→[テンプレート]で「テンプレートマネージャー」ダイアログを表示し、テンプレート表示欄で[ライセンス]を選択し、[追加]ボタンを押し、作成したライセンスファイルを選択します。追加されたライセンスファイルは、<ユーザのホームディレクトリ>\.netbeans\6.9\config\Templates/Licenses/license-xxxxx.txt として保存されます。
プロジェクトのproject.propertiesに、project.license=xxxxx を指定すれば以後適用されます。
ライセンスファイルで使用できる変数名は、以下URLに記載があります。
新しい変数は、User.propertiesに定義したものが使えるようです。project.propertiesに定義したものは使えませんでした。
追加モジュール(プラグイン)は、ユーザーディレクトリの下にインストールされます。ですので、他のユーザーとの競合は起きないようになります。逆に、誰かが個人で入れたプラグインは反映されないので、自分で入れる必要があります。
追加モジュールのインストール手順は、通常インターネットに接続可能な環境を前提としています。もし、NetBeansを実行するマシンがインターネットに接続できない場合は、追加モジュールを別途ダウンロードしてからファイルを移送して、ダウンロード済みプラグインのインストールを行います。
追加モジュールのダウンロードについては、NetBansのFAQ: FaqDownloadingUCModule に説明があります。そこに記載のWebページ Update Center Content Inspector を開き、追加モジュールのupdate URLを指定すると、ダウンロードページになります。ダウンロードした *.nbm ファイルを、NetBeansの[ツール]→[プラグイン]→[ダウンロード済み]タブを選択し、[プラグインの追加]ボタンを押し、ダウンロードした *.nbm ファイルを指定します。選択後、[インストール]ボタンを押します。
オンライン・マシンでインストールする際、一時的にダウンロードされた *.nbm ファイルをコピーして取っておく手段もあります。一時的にダウンロードしておく場所は、%USERPROFILE%\AppData\Roaming\NetBeans\7.2\update\download\です。更新が完了すると消えてしまうので、プラグイン・インストールの最後で「今すぐIDEを再起動(R)」ではなく、「後でIDEを再起動(L)」を選択し、必要なファイルをコピーしておいてからNetBeansを再度起動します。
Javaでは、ソースコードの検証を行うツールがいくつもあります。SQE(Software Quality Environment)は、ソースコードのコーディング規約チェックを行うCheckStyle、代表的なバグパターンと照合し、バグパターンに該当するコード箇所を検査するFindBugs、PMD、依存関係を解析するDependency Finderの各ツールをNetBeans用プラグインとして提供します。
やや挙動が不安定ですが(2010/7現在)、使用できるレベルです。
SQE pluginのバージョン | 2011/07/06リリース版(hudson-sqe-49) | ||
内蔵checkstyleバージョン | 5.3 | 最新版 | |
内蔵findbugsバージョン | 1.3.9 | 最新版 | |
内蔵PMDバージョン | 4.2.5 | 最新版 |
[ツール]メニュー→[プラグイン]で表示される「プラグイン」ダイアログ上で、[設定]タブを選択し、[追加]ボタンを押し、「アップデートセンターカスタマイザ」ダイアログ上で、名前に適当な「SQE」、URLに以下を指定し、SQEのアップデートセンターを追加します。
http://deadlock.netbeans.org/hudson/job/sqe/lastStableBuild/artifact/build/full-sqe-updatecenter/updates.xml
「プラグイン」ダイアログ上で、[使用可能なプラグイン]タブを選択し、FindBugs、PMD、CheckStyle、Dependency Finderをチェックして[インストール]ボタンを押します。
デフォルトでは、以下のルールが適用されます。
C:\Users\<ユーザー名>\.netbeans\7.0\config\Preferences\org\nbheaven\sqe\codedefects\checkstyle.xm
注)ユーザーのホームディレクトリはWindows 7の場合です。
現時点(2010/7/18)では、NetBeans上でCheckstyleの定義をカスタマイズするGUIは用意されていませんが、ルール設定ファイルとプロパティ設定ファイルを別途指定することができます。
とりあえず、上記のcheckstyle.xmlを、名前を変えて保存し(例:custom-checkstyle.xml)、編集します。
[ツール]メニューの[オプション]で、上メニューボタン[Quality]を選択し、[Checkstyle]タブを選択し、Config Fileを[Browse]ボタンを押して上記編集したファイル(例:custom-checkstyle.xml)に変更します。
デフォルトでは少々騒がしいチェック
<module name="NewlineAtEndOfFile"> <property name="lineSeparator" value="lf"/> </module>
<!-- <module name="RegexpSingleline"> <property name="format" value="\s+$"/> <property name="minimum" value="0"/> <property name="maximum" value="0"/> <property name="message" value="Line has trailing spaces."/> </module> -->備考) Checkstyle 5.1では、このルールはGenericIllegalRegexpからRegexpSinglelineに変更されています。
<module name="JavadocMethod"> <property name="scope" value="protected"/> </module> <module name="JavadocType"> <property name="scope" value="package"/> </module> <module name="JavadocVariable"> <property name="scope" value="protected"/> </module>
<module name="JavadocStyle"> <property name="checkFirstSentence" value="false"/> </module>以下はうまくいかなかった文終了条件指定
<module name="JavadocStyle"> <property name="endOfSentenceFormat" value="([.?!。?][ \t\n\r\f<])|([.?!。?!]$)"/> </module>※上記のように記述すればよいかと思いましたが、これでは日本語の句点が終わりとは認識されませんでした。
<module name="LineLength"> <property name="max" value="136"/> </module>
解析エラー
<module name="TreeWalker"> <property name="charset" value="UTF-8"/>
Checkstyleには、特定の箇所においてルールを抑制する機能(Suprress)があります。
ルール抑制定義ファイル
まず、checkstyle.xmlにて、<module name="Checker" ...>の子要素として<module name="SuppressionFilter"...>を定義し、その属性で抑制定義をするXMLファイルのパスを指定します。
<module name="Checker"> : <module name="SuppressionFilter"> <property name="file" value="C:/Users/torutk/.netbeans/7.0/config/Preferences/org/nbheaven/sqe/ codedefects/checkstyle-suppressions.xml" </module> </module>
XMLファイルパスは、相対パスで指定すると、NetBeans起動時のカレントディレクトリ(Windowsなら、ショートカットに定義している作業フォルダ)を基点とするようです。
checkstyle-suppressions.xmlに、抑制したい内容を<suppress>要素で記述していきます。
<?xml version="1.0"?> <!DOCTYPE suppressions PUBLIC "-//Puppy Crawl//DTD Suppressions 1.0//EN" "http://www.puppycrawl.com/dtds/suppressions_1_1.dtd"> <suppressions> <suppress .../> : </suppressions>
<suppress checks="MethodName" files=".*Test.java"/>
<suppress checks="JavadocMethod" files=".*[\\/]test[\\/]"/>
<suppress checks="AvoidStarImport" files=".*Test.java"/>
ルール抑制コメント
ToDo: 検証未
ソースコード中の該当箇所にコメントを記述する方法です。
public void run() { // CHECKSTYLE:OFF for (int i = 0; i < 100; i++) { // CHECKSTYLE:ON doSomething(); } }
ルールファイルに以下の記述が必要です。
<module name="TreeWalker"> : <module name="FileContentsHolder"/> : </module> <module name="SuppressionCommentFilter"/>
SQEをインストールすると、通常以下のフォルダにcheckstyleなどのJARファイルが置かれます。
C:\Users\<ユーザー名>\.netbeans\7.0\modules\ext
注)ユーザーのホームディレクトリはWindows 7の場合です。
この中で、次のファイルを、別途入手したCheckstyle 5.3に含まれるものと入れ替えれば、最新版Checkstyleとなります。
|
|
||
|
|
||
|
|
ルールの設定はGUIから行えます。
[ツール]→[オプション]で「オプション」ダイアログが表示されるので、[Quality]ボタンを選択、[FindBugs]タブを選択します。
ルール一覧と、各ルールについてチェック対象とするかしないかのチェックボックスが表示されます。任意の設定を行います。ここで設定した内容は、
C:\Users\<ユーザー名>\.netbeans\7.0\config\findbugs\UserPreferences.findbugs
に保存されます。(SQEプラグインインストール直後は存在しない)
findbugsのアノテーションedu.umd.cs.findbugs.annotations.SuppressWarnings を使用します。
すべてのルールを抑制する
@edu.umd.cs.findbugs.annotations.SuppressWarnings public class Foo { .. }
クラス全体でFindbugsのチェックを抑制しています。アノテーションは、クラス以外にもパッケージ、コンストラクタ、メソッド、フィールド、引数、ローカル変数にも適用できます。
特定のルールを抑制する
public class Bar { @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="URF_UNREAD_FIELD", justification="for extension") private int count; .. }
value= でルール名を記述し、justification= で抑制する理由を記述します。
@edu.umd.cs.findbugs.annotations.SuppressWarnings(value={"URF_UNREAD_FIELD", "DM_EXIT"}) public class Hoge { .. }
複数のルール名があるときの記述です。
Findbugsには、データマイニングという機能があります。
ルール抑制を、直接コード解析に指定するのではなく、すべてのルール適用結果を出しておいて、そのデータに対してルール抑制をして抽出する、という方法が実現できるのではないか?と考えてますが、未調査です。
PMDのルールベースに該当した行に警告アイコンが付きます。マウスを警告アイコンの上に移動すると、警告内容が表示されます。
プロジェクト単位で、PMDの警告一覧が表示されます。[ウィンドウ]メニューの[Quality]→[PMD]を選択すると、PMD警告一覧画面が表示されます。
PMDのルールベースのうち適用するルールを設定する、ルールのカスタマイズ画面がプラグインで提供されています。
NetBeans共通のルール設定は次の操作で行えますが、2011/1/12版では機能していません。
[ツール]メニューの[オプション]で、上メニューボタン[Quality]を選択し、[PMD]タブを選択します。ルール一覧表が表示されるので、適用する/しないを[Enabled]列のチェックボックスで指定します。
チェックボックスを外して[了解]を押すと、以下の設定ファイルにチェックを外したルール名が追記されます。
C:\Users\<ユーザー名>\.netbeans\7.0\config\pmd\pmd.settings
ヒント(Quick Fix)から抑止設定したルールは機能する(2010/11/19版)
ソースコードの行番号欄にPMDの警告が付いたとき、一緒に修正のヒント(Quick Fix)が表示されます。ここをクリックすると、[Disable PMD Rule: LocalVariableCouldBeFinal]のように表示されます。このメッセージをクリックすると、次からこのルールによる警告が付かなくなりました。
この設定は、プロジェクト固有のディレクトリ(<プロジェクト基点ディレクトリ>\nbproject\pmd.settings に保存されます。このファイルはデフォルトでは存在せず、最初にルールを抑止するときに生成されるようです。
プロジェクトのプロパティからQuality→PMDでルール一覧から設定すると機能する(2010/11/19版)
上記ヒントから抑止したルールは、このルール一覧表で[Enabled]列のチェックが外れています。プロジェクトごとのルール設定は有効です。
SQEとは別に、PMD開発本家などからNetBeans用のプラグインがリリースされています。SQE版のPMDは、ルール設定をマシン全体で共有することができない(バグ?)ため、プロジェクト毎に保持する必要があります。
本家プラグインでは、マシン全体で共有することができます。
ダウンロードは以下URLから可能です。
[ツール]→[オプション]で[PMD]タブを選択すると、自動検査実行の可否設定およびルール設定ができます。
- Enable scan
- 自動検査実行可否の設定(チェックボックス)
- Rules
- 使用するルール定義の編集
- Rulesets
ルールを変更すると、以下に設定が保存されます。
C:\Users\<ユーザー名>\.netbeans\7.0\config\Preferences\pmd.properties
PMDのルール抑制は、ソースコード中にアノテーションまたはコメントを記述します。
アノテーションによる抑制
@SuppressWarnings("PMD") public class Foo { .. }
クラス全体に対するPMDの検証をすべて無効にします。
@SuppressWarningsはJava標準アノテーションです。また、クラスだけでなくメソッドにも付けられるので、特定のメソッドについてPMDのルールチェックを抑制することもできます。
特定のルールを抑制したい場合は、ルール名を列挙します。
@SuppressWarnings({"PMD.MethodNamingConventions","PMD.ClassNamingConventions"}) public class Bar { .. }
コメントによる抑制
public class Hoge { public int count; // NOPMD
NetBeans 7.2から、Findbugsが統合されるようになります。ただし、デフォルトではFindbugs統合プラグインはインストールされないので、[ツール]メニュー>[プラグイン]>[使用可能なプラグイン]タブを選択、一覧から[Findbugs Integration]にチェックを付けて[インストール]ボタンを押します。
使用方法は、[ソース]メニュー>[検査...]を選択し、「検査」ダイアログが表示されるので、[スコープ]欄から、現在のプロジェクト/開いているプロジェクト のいずれかを選択、[使用]欄から、[構成]を選択し、[FindBugs]を選択、[検査]ボタンを押してFindBugsによる検証を実行します。
ルールの設定は、「検査」ダイアログの[管理]ボタンを押し、「構成」ダイアログで設定します。
NetBeansのプラグインの標準配布手順はインターネット接続が前提となっています。しかし、開発する場所によっては必ずしもインターネットに接続できません。そのようなときの対応として、プラグイン更新サイトからXMLファイルと必要なnbmファイルを事前にダウンロードしてローカルにアップデートセンターを構築する方法を模索してみました。
アップデートセンターのXMLファイルへのURLを指定すると、その中に記載されているプラグインファイル(*.nbm)をXMLファイルとともにカレントディレクトリにダウンロードするツールを作成しました。とりあえず上記SQEのダウンロードができるようになったもので、他のプラグインについては未検証です。
実行は、javaコマンドで-jarオプションで上記jarファイルを指定し、コマンドラインオプションにアップデートセンター(XMLファイル)へのURLを指定します。カレントディレクトリにファイルをダウンロードします。
画像ファイルを、ソースパッケージのどこか適当な場所に置きます。mainメソッドを提供するクラス(デフォルトではMain.java)と同じ場所が一つの候補です。
次に、プロジェクトのmanifest.mfを編集します。プロジェクトツリーではmanifest.mfファイルが非表示なので、ファイルツリーを選択します。プロジェクトの直下にmanifest.mfがあります。以下行を追加します。
SplashScreen-Image: myapp/mysplash.jpg
NetBeans上で実行/デバッグするときは、スプラッシュ画像が表示されません。
javadocコマンドはオプション-overviewで、生成されるJavadocのトップページ(概要)の説明を記述するHTMLファイルを指定することができます。「プロジェクト・プロパティ」ダイアログでカテゴリ欄の[構築]>[ドキュメント化]を選択し、右側ペインで追加のJavadocオプション欄に、以下のように記述します。
-overview ${basedir}/${src.dir}/overview.html
なぜか、-overview src/overview.html ではエラーになってしまいました。(コマンドプロンプトからant javadocを起動するとうまくいくが)
なお、このjavadoc設定は、プロジェクト単位でantの設定ファイル(nbproject/project.properties)にjavadoc.additionalparamというキーで保存されます。
javadocコマンドはオプション-tagまたは-tagletで、標準にはない独自のタグを認識することができます。-tagletは別途タグを解析しドキュメントを生成する追加プログラムを作成する必要があるので、簡単に済ます場合は-tagを指定します。「プロジェクト・プロパティ」ダイアログでカテゴリ欄の[構築]>[ドキュメント化]を選択し、右側ペインで追加のJavadocオプション欄に、以下のように記述します。
-tag pre:tcm:"事前条件" -tag post:tcm:"事後条件" -tag inv:t:"不変条件"
[リファクタリング]メニュー→[名前の変更]からダイアログ上で新しい名前を入れる方法もありますが、エディタ上で変更したい名前の上にカーソルを置いて、Ctrl-R キーを押すと、エディタ上で直接名前変更の過程が見えます。いちいちダイアログ(GUI)が出るよりも、エディタ上で直接変更できる、こちらの方法が便利です。
クラスを新規作成後、クラス定義にimplements句を記述します。
上図のように、クラス名の直後にカーソルがある状態で、Ctrl+スペースキーを押す(または[ソース]メニュー→[コードを補完]を選択する)と、この場所で記述可能なキーワードの候補がでるので、implementsを選択します。
次にimplementsの後ろでCtrl+スペースキーを押すと、上図のように実装可能なインタフェースの一覧がでるので、実装したいインタフェースを選択します。
この状態では、interfaceに定義されたメソッドが実装されていないので、クラスがエラー状態にあります。そこで、クラス定義の行にあるヒントアイコンをクリックします。
すると、インタフェースに定義されているメソッドの仮実装コードが展開されます。
あらかじめ登録されたコードテンプレートを挿入します。例を次に示します。
ここで、soutvと入力し
続いてTABキーを押すと、
と、System.out.println文が展開され、最も直前に宣言(≠使用)された変数がprintlnの引数に展開されます。
このような便利なコードテンプレートがデフォルトで用意され、カスタマイズできます。[ツール]メニュー→[オプション]で、[エディタ]アイコンを選択し、[コードテンプレート]タブを選択すると現状の定義を確認でき、ここでカスタマイズができます。
よく使いそうなと思ったコードテンプレートを抜粋します。
予約語・リテラル・型名・メソッド名の省略形
ab abstract as assert bo boolean br break; cl class cn continue db double df default: En Enumeration eq equals Ex Exception ex extends f final fa false fi final fl float ie interface im implements in interface iof instanceof ir import le length na native Ob Object Pf public final 注)大文字の'P'はpublic Ps public static Psf public static final Psfb public static final boolean Psfi public static final int Psfs public static final String pe protected pf private final pr private ps private static psf private static final psfb private static final boolean psfi pricate static final int pu public pvb private volatile boolean re return St String sh short st static su super sy synchronized th throws tr transient vo volatile
制御構文の展開
do do { } while (ture); dowhile for for (int i = 0; i < 10; i++) { } forc for (Iterator it = col.iterator(); it.hasNext();) { Object object = it.next(); } fore for (Object object : col) { } fori for (int i = 0; i < arr.length; i++) { Object object = arr[i]; } forl for (int i = 0; i < lst.size(); i++) { Object object = lst.get(i); } form for (Map.Entry<KeyType, ValType> en : m.entrySet()) { KeyType key = en.getKey(); ValType val = en.getValue(); } forst for (StringTokenizer stringTokenizer = new StringTokenizer(STRING); stringTokenizer.hasMoreTokens();) { String token = stringTokenizer.nextToken(); } forv for (int i = 0; i < vct.size(); i++) { Object object = vct.elementAt(i); } spl for (String string : string.split(",")) { } if if (true) { } iff 同上 ife if (true) { } else { } ifelse inst if (this instanceof Object) { Object object = (Object) this; } sw switch (var) { case val: break; default: throw new AssertionError(); } trycatch try { } catch (Exception e) { } wh while (true) { } whilexp 同上 whileit while (it.hasNext()) { Object object = it.next(); } whilen while (en.hasMoreElements()) { Object object = en.nextElement(); }
式・文の展開
o Object object = new Object(); n 同上 newo 同上 2al List<String> list = new ArrayList<String>(Arrays.asList(arr)); 2ar clazz[] arr = coll.toArray(new clazz[coll.size()]); 2do try { DataObject dob = DataObject.find(this); } catch (DataObjectNotFoundException ex) { .printStackTrace(ex); } 2f File file = FileUtilType.toFile(this); 2fo FileObject fileObject = FileUtilType.toFileObject(FileUtilType.normalizeFile(f)); 2l List<String> list = Arrays.asList(arr); 2s Set<String> set = new HashSet<String>(Arrays.asList(arr)); al List<String> list = new ArrayList<String>(); ll List<String> list = new LinkedList<String>(); set Set<String> set = new HashSet<String>(); map Map<String, String> map = new HashMap<String, String>(); asort Arrays.sort(Array); csort Collections.sort(var); rn return null; sb StringBuilder stringBuilder = new StringBuilder(); ap sb.append(); apo if (sb.length() > 0) { sb.append(','); } sb.append("this="); sb.append(this); as assert true; iae throw new IllegalArgumentException("arg"); ise throw new IllegalStateException("arg"); npe throw new NullPointerException("arg"); tw throw new IllegalStateException(); fy finally { } log Logger.getLogger(Foo.class.getName()).log(Level.INFO, "message"); logb logger.log(Level.INFO, "bundle_key"); logbp logger.log(Level.INFO, "bundle_key", this); logbps logger.log(Level.INFO, "bundle_key", new Object[]{null})); loge Logger.getLogger(Foo.class.getName()).log(Level.INFO, "message", ex); logp Logger.getLogger(Foo.class.getName()).log(Level.INFO, "message {0}", this); logr private static final Logger logger = Logger.getLogger(Foo.class.getName()); logrb private static final Logger logger = Logger.getLogger(Foo.class.getName(), Foo.class.getPackage().getName() + ".Log"); serr System.err.println(""); sout System.out.println(""); soutv System.out.println("exp = " + exp); pst printStackTrace(); tds Thread.dumpStack(); inst if (this instanceof Object) { Object object = (Object) this; } spl for (String string : string.split(",")) { } jaxbm try { javax.xml.bind.JAXBContext jaxCtx = javax.xml.bind.JAXBContext.newInstance(this.getClass().getPackage().getName()); javax.xml.bind.Marshaller marshaller = jaxbCtx.createMarshaller(); marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_ENCODING, "UTF-8"); marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); marshaller.marshal(this, System.out); } catch (javax.xml.bind.JAXBException ex) { // XXXTODO Handle exception java.util.logging.Logger.getLogger("global").log(java.util.logging.Level.SEVER, null, ex); } jaxbu try { javax.xml.bind.JAXBContext jaxbCtx = javax.xml.bind.JAXBContext.newInstance(this.getClass().getPackage().getName()); javax.xml.bind.Unmarshaller unmarshaller = jaxbCtx.createUnmarshaller(); this = (MyClass) unmarshaller.unmarshal(new java.io.File("File path")); } catch (javax.xml.bind.JAXBException ex) { // XXXTODO Handle exception java.util.logging.Logger.getLogger("global").log(java.util.logging.Level.SEVER, null, ex); }
クラス・メソッドの展開
fc final class Type { Type() { } } ic class Type { Type { } } pfc private final class Type { Type() { } } psfc private static final class Type { Type() { } } sc static class Type { Type() { } } sfc static final class Type { Type() { } } pue public enum Type { } m private static final void method() { } Pfm public final void method() { } Pm public void method() { } Psfm public static final void method() { } pfm private final void method() { } pm private void method() { } prfm protected final void method() { } prm protected void method() { } prsfm protected static final void method() { } psfm private static final void method() { } psm private static void method() { } psvm public static void main(String[] args) { } rnn Runnable runnable = new Runnable() { public void run() { } };
その他
fcom //<editor-fold defaultstate="collapsed" desc="comment"> //</editor-fold>
複数のプロジェクトでひとつのアプリケーションなりシステムを構成する場合、プロジェクトを束ねる機能があると便利です。そのときは、プロジェクトグループを作成し、関係するプロジェクトを追加します。
複数の開発者で共同開発するときの設定共有についてのメモです。
プロジェクトで利用するサードパーティ製ライブラリは、通常ライブラリとして登録してプロジェクト設定で参照します。このプロジェクト設定(デフォルトではAntのビルド定義ファイル)を、リポジトリに登録して開発者同士で共有する場合、サードパーティ製ライブラリの登録名を一致しておかないと、エラーとなります。
NetBeansの場合、ユーザーが追加したライブラリ設定は以下のディレクトリに設定ファイルとして保存されます。
Windows OSの場合のパス
%USERPROFILE%\.netbeans\7.0\config\org-netbeans-api-project-libraries\Libraries\
注記)インストール直後で1度もライブラリを登録していない場合、最後のLibrariesディレクトリが作成されていません。
例えば、eventbus ライブラリを、[ツール]>[ライブラリ]>[新規ライブラリ]でライブラリ名に"EventBus"として設定すると、上記ディレクトリの下に、EventBus.xml という名前の設定ファイルが生成されます。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE library PUBLIC "-//NetBeans//DTD Library Declaration 1.0//EN" "http://www.netbeans.org/dtds/library-declaration-1_0.dtd"> <library version="1.0"> <name>EventBus</name> <type>j2se</type> <volume> <type>classpath</type> <resource>jar:file:/C:/Program%20Files/Java/eventbus/eventbus-1.4.jar!/</resource> </volume> <volume> <type>src</type> <resource>jar:file:/C:/Program%20Files/Java/eventbus/eventbus-1.4-sources.jar!/</resource> </volume> <volume> <type>javadoc</type> <resource>jar:file:/C:/Program%20Files/Java/eventbus/eventbus-1.4-javadoc.jar!//</resource> </volume> <volume> <type>maven-pom</type> </volume> </library>
このファイルを、他のマシンでそのログインユーザーの同様の場所にコピーすれば、ライブラリ設定を共有することができます。
ただし、このXMLファイル例を見ると分かる通り、JARファイルのパスが絶対パスになっているので、ライブラリのインストール先を合わせておくのがよいと思います。(Windows Vista以降なら、ジャンクション/(真の)シンボリックリンクが使えるので、そちらで回避してもよいかも)
NetBeansでデフォルトのAntを使ったプロジェクトを作成し、ライブラリ設定で定義したライブラリを参照する場合、そのプロジェクトとソースをビルドするには、NetBeansをインストールしたユーザーで、かつライブラリ設定が同じく定義されている必要があります。サーバーでApacheやJenkinsユーザーなどの権限で動く場合、そのままAntでビルドするとエラーとなります。
NetBeansでプロジェクトを生成すると、nbprojectの下にbuild-impl.xmlというファイルが生成され、これがAntビルドの大半の設定が書かれたファイルとなります。build-impl.xmlファイルは、nbproject\private\private.properties 他のファイルをインクルードしています。privateディレクトリは、複数開発者でプロジェクト設定を共有するときに、除外する(リポジトリにはあげない)というルールになっています。NetBeansでプロジェクトを開くときに、ユーザー固有の環境で自動で作成されるからです。
このprivateディレクトリが生成された後であれば、コマンドからantでNetBeansプロジェクトをビルドすることができます。しかし、NetBeansでプロジェクトを開かずにビルドしようとしたり、Jenkins等の無人環境でリポジトリからチェックアウトしてビルドするときは、エラーとなることがあります(依存関係がない単純なプロジェクトならうまくいく)。
<target depends="-pre-init" name="-init-private"> <property file="nbproject/private/config.properties"/> <property file="nbproject/private/configs/${config}.properties"/> <property file="nbproject/private/private.properties"/> </target>
user.properties.file=C:\\Users\\torutk\\.netbeans\\7.0\\build.properties
libs.EventBus.classpath=C:\\Program Files (x86)\\Java\\eventbus-1.4\\eventbus-1.4.jar libs.EventBus.javadoc=C:\\Program Files (x86)\\Java\\eventbus-1.4\\eventbus-1.4-javadoc.jar libs.EventBus.maven-pom= libs.EventBus.src=C:\\Program Files (x86)\\\eventbus-1.4\\eventbus-1.4-sources.jar
ということで、非NetBeans環境でリポジトリからチェックアウトしてビルドするときは、チェックアウト後、nbprojectディレクトリの下に、private/private.propertiesを作成し、あらかじめ同マシンでNetBeans環境からbuild.propertiesをコピーしてそれを指すuser.properteis.file だけ記述しておけばよさそうです。
T.B.D.
なにかの拍子で、[デザイン]モードにしたとき、(GUI)パレットが「読み込み中」の表示のままいつまでたってもGUIコンポーネントが表示されないという状態になってしまいました。
いろいろ現象を探っていき、プロジェクトディレクトリを丸ごと(cp -prコマンドで)別ディレクトリにコピーして開いたら、現象が出なくなりました。そこで、キャッシュディレクトリ(ユーザーのホームディレクトリ/.netbeans/7.0/var/cache)をズバッと削除してみたら現象が消えました。