GlassFish Full Build Instructions for Windows

GlassFishは、OSSとして当然のことながら、ソースコードからビルドすることが出来ます。全般的な手順は公式サイトの GlassFish Full Build Instructions で示されていますが、ユーザーの多いであろうWindowsに特化したものではないため、今回はWindows上でビルドすることを前提に方法を説明します。かくいう筆者も、開発はもっぱらWindows 7で行っており(テストはWindows、Linux、Solarisのいずれでも行いますが...)、少しでもお役に立てるのではないかと信じています。

1. 心構え

GlassFish公式の手順では、Maven 3とSubversionさえあればGlassFishをビルドできるかのように書かれていますが、Windows上ではそう甘くはありません。最大の障壁はWindows(というか具体的にはエクスプローラー)の制限のためIDEが使用できないことにあります。

大きな製品なので、IDEでソースを参照するのが一番望ましいのですが、そこに立ちはだかるのがエクスプローラー(ブラウザではなく、ファイルやフォルダを管理するアレのことです)のパス最大長制限です。GlassFishほどの大規模製品となると、Mavenのプロジェクト構造がかなり深くなり、250文字程度までしかパス名を受け付けないエクスプローラーではソースコードをダウンロードできません。ただし、ファイルシステム(NTFS)自体は数万文字のパス名を受け付けるので、エクスプローラーを経由しない方法、具体的にはコマンドラインからのSubversionチェックアウトとMavenビルドであれば問題は回避できます。

少々面倒ですが、以下コマンドラインを使用したビルド手順について話を進めてゆきます。PowerShellでは検証していませんが、概ね同様の方法で進められるでしょう。

2. 道具の準備

まずは道具を準備しましょう。必要なものは、JDK7、Subversionクライアント、Mavenです。

  • JDK7 ― 公式のガイドではJDK7 Update 9以降を要求していますが、JDK7はUpdate 6以降、ひたすらセキュリティホール潰しをやってきた結果、機能的には全くと言っていいほど進化していません。とりあえず、最新のJDK7(本稿執筆時ではUpdate 21)であれば問題ないでしょう。なお、JVMは32bit/64bitのいずれでも大丈夫です。
  • Subversionクライアント ― Subversion自体はApacheに移管されましたが、使いやすいバイナリは開発元のCollabNetなどで配布していますので、そちらを使った方が良いでしょう。CollabNetからダウンロードする場合は、初回のみユーザー登録が必要なので注意が必要です。
  • Maven ― 現在開発中の4.0系はMaven 3.0.3以降の利用が要件です。Maven自体は多くのIDEに付属していますが、CLIを持たないため別途ダウンロードした方がトラブルは少ないでしょう。

3. 初期設定

まず、java、svn、mvnにパスを通しておくことをお勧めします(CollabNetのインストーラーを使用した場合、svnのパスは既に設定されています)。具体的なパスについては各自の環境に合わせて設定してください。

次に、Mavenを動作させるための環境変数を設定します。

  • JAVA_HOME=<JDK7のパス>
  • MAVEN_OPTS=-Xmx1024M -XX:MaxPermSize=512m

JAVA_HOMEはASFの製品ではおなじみですね。GlassFishはJAVA_HOMEを参照しないため設定していない場合もあるかと思われますが、ここはきちんと設定してください。MAVEN_OPTSではMaven実行時のJVMオプションを指定しています。デフォルトでJVMが確保するメモリーは少ないので、そのままではビルド中にOutOfMemoryErrorで落ちる可能性が大です。少なくとも-Xmxの値は512M以上にしてください。

続いて、Mavenが参照するグローバルな設定ファイル settings.xml を編集します。settings.xmlは原則として {user.home}\.m2\settings.xml にあります。下記に settings.xml の例を示します。

<?xml version="1.0" encoding="UTF-8"?>
<settings>
  <mirrors>
    <mirror>
      <id>maven-central</id>
      <url>http://repo1.maven.org/maven2/</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>
</settings>

現在GlassFishに必要なモジュールはすべてMavenのセントラル・リポジトリーに登録されていますので、マスターから取得する場合はリポジトリーの指定は不要です。上記のケースに限っては settings.xml 自体を省略できます。GlassFishのビルド手順にはMavenの設定例がいくつか掲載されていますが、リポジトリーの一部がメンテナンス中などの理由でアクセスできない場合の代替手段であり、それが必要とされるケースは多くはありません。

以上で準備は完了です。

4. GlassFishのソースコードをチェックアウトする

GlassFishのソースコードは相当量になりますので、専用のフォルダを作成することをお勧めします。以降、フォルダ名を %GLASSFISH_SRC% と表記します。

一番簡単なものは、リポジトリーのtrunkからソースコードをチェックアウトする方法です。%GLASSFISH_SRC% で次のようにコマンドを入力してみてください(完了するまで結構時間がかかりますので、覚悟してください)。

svn checkout https://svn.java.net/svn/glassfish~svn/trunk/main

近年、CIビルドが一般的となったため、「trunkにコミットされているリソースだとビルドできない!」なんてことは少なくなっていますが(とはいえ、リリース直前はプロジェクト全体がバタバタしているので結構あるかも?)、バグは残っているかもしれません。心配な場合はリリース済みのバージョンのソースコードをダウンロードしてみましょう。具体的なURLはリポジトリーのビューワーで確認して頂きたいのですが、安定版リリースのURLの例をいくつか転載しておきます。命名規則がある程度固まっているので、他のビルドも探しやすいとは思います。

例1: GlassFish 4.0 Build 89 (RC5)

https://svn.java.net/svn/glassfish~svn/tags/main-4.0-b89

例2: GlassFish 3.1.2

https://svn.java.net/svn/glassfish~svn/tags/3.1.2

5. GlassFishをビルドする

チェックアウトが完了すると、%GLASSFISH_SRC%以下にmainというディレクトリが作成されているはずです。この中にあるリソースがGlassFishのソースファイル一式です。まず%GLASSFISH_SRC%\mainに移動します。

いくつかファイルとディレクトリが存在していますが、その中に  pom.xml が存在していることを確認してください(これがないとビルドできません)。pom.xml の存在を確認した後、以下のように mvn コマンドでビルドします。

mvn install

コマンド一発で、他に手順はいりません。環境によってはチェックアウト以上に時間がかかるかもしれませんが気長に待ちましょう。参考まで、筆者の開発環境(Windows 7/Core i5/2GB RAM)で約2時間かかりました)。

ビルド完了後、%GLASSFISH_SRC%\main\appserver\distributions以下にGlassFishが出来上がっているかと思います。

  • glassfish  -- GlassFish 4.0 (Full Profile)
    • target
      • stage -- 英語版実行可能リソース
      • glassfish.zip -- 英語版ZIPアーカイブ
  • web -- GlassFish 4.0 Web Profile 
    • target
      • stage --  英語版実行可能リソース
      • web.zip -- 英語版ZIPアーカイブ

すぐに使えるのは上記の英語版ZIPアーカイブです。管理コンソールを起動すると分かるのですが、現段階ではまだ更新ツールのリポジトリーが登録されていないため、すぐに日本語化することは出来ません。ただし、I18N/L10Nのバンドル自体は%GLASSFISH_SRC%\main\appserver以下に存在(点在)しているため、これらを集めてpkgコマンドなどでインストールすれば日本語化は可能だと思われます。

6. リビルドと削除

trunkのリソースは絶えず更新されています。リビルドする場合には、svnで更新した後にmvnで再度ビルドします。具体的には%GLASSFISH%\mainで以下のコマンドを続けて実行します。

svn update
mvn install

削除する場合は以下のように必ずコマンドラインから実行してください。エクスプローラーからでは、前述の文字数制限のため削除に失敗します。

RMDIR /S /Q main

7. ビルドがうまくいかない場合は?

ビルドがうまくいかない場合、いくつかの可能性が考えられます。

  • Mavenリポジトリーの一部(または全部)がオフラインのため依存モジュールをダウンロードできない。大抵の場合はすぐに復帰する。定期メンテナンスで長時間停止する場合は事前にアナウンスがあるはずなので確認しておく。
  • settings.xml に誤りがある。プロキシーの設定、リポジトリーのロケーションなどが適切でないか、もしくはオフライン時の代替設定を記述しているため依存関係の一部を解決できない。
  • pom.xml に誤りがある。リリース直前の trunk では pom.xml の修正が間に合わないこともあり、こういった事態も起こりうる。タグ・ブランチでは基本的にあり得ないと思って良い。

8. まとめ

GlassFish 3.1.2がリリースされたあたりから、GlassFishのビルド手順がMaven 3に合わせてリファインされ、手順通りに実行すればほとんどのケースでビルドが成功するようになりました。以前は手順通りにやってもなぜかビルドが失敗したり、そもそもビルド環境を整えるだけでも大変だったのですが、現在はそのような心配もなくなりました。

GlassFishも今や有力なJava EEサーバーの1つとして認知されるようになり、ソースコードの量も半端ではないのですが、実際にビルドしてみると(時間こそかかるものの)あっさり出来上がってしまうことに驚かれる方も多いのではないでしょうか。

GlassFishの不具合(バグ)を修正するパッチをコミュニティーに送ったり、コミッターとして直接開発に加わるには、今回ご紹介したビルド手順を把握していることはもちろんのこと、「Oracle Contributor Agreement」という契約書面を米Oracle Corporationと交わす必要があります(と言っても所定のフォームに住所・氏名・連絡先などを記入するだけですが)。後々権利関係で揉めないようにするための手続きのようです。既に他のプロジェクトでOCAを締結している場合は新たな手続きは不要で、直接各モジュールの責任者とコンタクトを取る形になります。

この記事で、GlassFishのビルドがそれほど難しいものではないことを多くの方に気づいて頂けたら幸いです。