2013年1月1日火曜日

App Inventor本体の開発環境について(開発者向け) Part2

あけましておめでとうございます。
今年もどうぞよろしくお願いいたします。

2013年最初のエントリは予告しました通りApp Inventor本体の開発環境について(開発者向け)のPart2エントリです。

前回はEclipseにApp InventorのソースをインポートしてBuild環境を整備するというデベロッパ向け文書の(テキトーな)和訳に自前のスクリーンショットを交えてご紹介しました(最初のポスト時よりも画像も増やしています)。

その後、ahiru_spさんのブログで大晦日に取り上げていただきました。ご紹介いただきありがとうございます。

とてもわかりやすい開発環境の作り方



さて、ソース取り込んだのはいいけど

「Eclipseからのbuildはどうすんのよ?」

とか

「どうやってそれぞれのサーバを起動するよ?」

という疑問が出てくると思います。

コマンドプロンプトでant実行したりエクスプローラーからバッチファイルで起動したりするのもアリですが、せっかくなのでEclipseの実行メニューから実行する方法について補足したいと思います。

※ローカルBuildサーバを走らせるには64bit版Eclipseで64bit版Javaの環境がないと巨大なHeap領域の確保が出来ないので注意が必要です。


■まえがき

筆者もハマったことなので最初に触れておきますが、JDKとJREの両方がインストールされている場合、BuildサーバソースのCompiler.java内で
System.getProperty("java.home")
として取得しているjava.homeの位置が環境変数で指定しているJAVA_HOMEとは別の場所になってしまうことに注意が必要です。

Buildサーバ実行中とAppInventorソースツリー全体のビルド時にどうしてもjarsigner.exeを実行するところでコケてしまうのでおかしいと思っていたのですが、これはJDK側に内包されているJREを前提にコードが書かれているためなので、Buildサーバ実行時のJavaバーチャルマシンをバッチファイル内でフルPATH指定のJDK側を指定することで解決できました(以下でご紹介するバッチファイルではそのようにしてあります)。

また、AppInventorソースツリー全体のビルド時に同じ問題でコケるものは、EclipseのデフォルトJREがJDK側になっていないのが原因であるため、JDK側のものを利用するように設定変更しておく必要があります。通常はJREのみになっていると思いますので新規で追加してください。

・インストール済みのJRE設定


































やっと本題に入ります。

■BuildサーバとAppInventorサーバ起動を外部ツール実行メニューに登録する

以下の2つのバッチファイル(launch-buildserver.cmdとstartAI.cmd)とbuild.xmlファイルをappinventor-soucesのトップレベルフォルダに作成します(トップレベルでないとant cleanした時に削除されてしまいますので)。










































それぞれの中身は以下の通りです(バッチファイルはAI4A-Configuratoinsのものをひな形にして書き換えると楽です)。

●launch-buildserver.cmd
cd /d %~dp0\appinventor\buildserver\build\run
REM set the location of your jarsigner
set JARSIGNERLOCATION=C:\Program Files\Java\jdk1.6.0_38\bin\jarsigner.exe
cd lib
"C:\Program Files\Java\jdk1.6.0_38\bin\java" -Xmx1828m -cp activation-1.1.jar;jersey-bundle-1.3.jar;args4j-2.0.18.jar;jersey-multipart-1.3.jar;asm-3.1.jar;commons-io-2.0.1.jar;jettison-1.1.jar;BuildServer.jar;json.jar;CommonUtils.jar;jsr311-api-1.1.1.jar;CommonVersion.jar;localizer.jar;FastInfoset-1.2.2.jar;mail-1.4.jar;grizzly-servlet-webserver-1.9.18-i.jar;guava-11.0.1.jar;rome-0.9.jar;http-20070405.jar;sdklib.jar;jackson-core-asl-1.9.4.jar;stax-api-1.0-2.jar;jaxb-api-2.1.jar;wadl2java.jar;jaxb-impl-2.1.10.jar;wadl-cmdline.jar;jaxb-xjc.jar;wadl-core.jar;jdom-1.0.jar -Dfile.encoding=UTF-8 com.google.appinventor.buildserver.BuildServer

●startAI.cmd
REM start the appserver locally

REM Jefferson Software
REM see http://sites.jsoft.com/appinventor/ for more info
REM or in the ai4a group https://groups.google.com/forum/?fromgroups#!forum/ai4a

REM using lines from App Inventor run-emulator.bat
REM I do not know Windows cmd commands
REM improvements welcome

REM Change current directory and drive to where this script is.
cd /d %~dp0\appinventor\appengine\build\
REM set the location of the App Engine
set AEJSDK=C:\Users\UserName\Downloads\appengine-java-sdk-1.7.3

REM assumes war is below this cmd
start %AEJSDK%\bin\dev_appserver.cmd --port=8888 --address=localhost war

※赤字の部分はご自身の環境に合わせて書き換えてください。

●build.xml

<?xml version="1.0" encoding="UTF-8"?>
<project name="project" default="default">
    <description>AppInventorServers batch file</description>

    <target name="buildserver">
        <exec executable="cmd">
            <arg value="/c" />
            <arg value="start launch-buildserver.cmd" />
        </exec>
    </target>
    <target name="aiserver">
        <exec executable="cmd">
            <arg value="/c" />
            <arg value="startAI.cmd" />
        </exec>
    </target>
</project>



実は上記のバッチファイルをダブルクリックするとそのままでも直接実行できるのですが、ここでは外部ツール実行メニューから実行することを前提にしているのでそちらの設定をします。

追加したbuild.xmlを右クリックし、[実行]-[Antビルド...]を選択します。同じようなメニューがありますが、画面で示しているものはbuild.xml中のターゲットを個別に設定する場合に使います。









































最初にローカルBuildサーバの設定をしましょう。

以下のスクリーンショットにあるように、名前を「Run LocalBuildServer」と書きます(お好きな名前で大丈夫です)。

そして、実行するターゲットを検査の中のbuildserverにチェックを入れます。

適用して実行ボタンをクリックすると、バッチファイルが実行されてコマンドプロンプトが開いてBuildサーバが実行されます。

なお、開いたコマンドプロンプトを終了する場合には、

必ず「Ctrl+C」「Y」でバッチジョブの終了をしてから

コマンドプロンプトを閉じてください。これをしないでWindowを閉じてしまうとJavaの実行プロセスが残ってしまい、Buildサーバがメモリに居座ってしまいますので十分注意してください。これは、AppInventorサーバも同様です。




































この設定が完了すると、外部ツール実行メニューに「Run LocalBuildServer」というメニューが追加されるのでこれを選択することでBuildサーバが実行できるようになります。

先ほどのスクリーンショットをご覧になってお気付きの方も多いと思いますが、実行ターゲットの選択肢に「aiserver」という項目がありました。同じ手順で「名前欄」を別の名前「Run AppInventorServer]を設定して実行ターゲットを「aiserver」にすればAppInventorサーバの実行メニューが追加されることになります(この部分の説明、割愛しても大丈夫ですよね?)。

以上で、BuildサーバとAppInventorサーバの実行メニューの追加が完了です。


■AppInventor全体のBuildについて

AppInventorのソースをいじった後に、全体をビルドし直す方法をご紹介します。

まずはant cleanで一度コンパイル済みのものをクリアする方法から。

全体のビルドに関係のあるbuild.xmlファイルはappinventor-sources/appinventor以下にあります。先ほどと同じように右クリックして[実行]-[Antビルド...]を選択します。









































まずはソースツリーをキレイに掃除するためにant cleanの設定します。
ここでは名前に「AppInventor Ant Clean」と設定し、ターゲットは「clean」にチェックを入れます。




































適用して実行すると、コマンドプロンプトからant cleanしたのと同様の処理が実行されます。

Eclipseのコンソールに

BUILD SUCCESSFUL

と出ていれば掃除完了です。

次に全体のビルドですが、ほとんど同様の手順で上記の構成の編集のところで「all」にチェック(何もチェックしなければ自動的にallが実行されます)




































を入れた上で、

JREタブをクリックして開いてください。

そして、ランタイムJREで「別のJRE」を選択してJDK側のJREを指定してください(全体の設定でしたものがこちらでは適用されないようなのです)。

※ここを指定しなくても良い方法をご存じの方、教えてください。




































これで適用して実行すると全体のビルドが開始されます。

ビルドには少し時間がかかりますが、Eclipseのコンソールに

BUILD SUCCESSFUL

と出ていればビルド完了です。

外部ツール実行メニューからそれぞれサーバを起動してブラウザで

http://localhost:8888/

にアクセスして動作を確認してみてください。

以上です。

他にもっと良い方法があるよ、とか間違いなどありましたらご指摘いただければ幸いです。


0 件のコメント:

コメントを投稿

おすすめ書籍