S-JIS[2014-12-13/2021-12-09] 変更履歴

Asakusa Framework Shafu

Asakusa FrameworkのShafuについて。


概要

Shafu(車夫)は、Asakusaアプリケーションのビルド等が行えるEclipseプラグイン。

AsakusaFWは0.5.2(正式には0.6.0)からGradleを使ってビルドできるようになったが、Shafuを使うと、そのコマンドをEclipseから実行できる。

Shafuでは以下のようなことが出来る。


インストール

ShafuはEclipseプラグインなので、通常のEclipseプラグインのインストール方法と同じ方法でインストールする。

  1. Eclipseのメニューバーの「Help」→「Install New Software」を選択し、Installダイアログを開く。
  2. 「Work with」にShafuのサイト「http://www.asakusafw.com/eclipse/jinrikisha/updates/」を指定する。

設定方法

Shafuの設定を行う方法。[2015-04-18]

  1. Eclipseのメニューバーの「Window」→「Preferences」を選択し、Preferencesダイアログを開く。
  2. 左側のツリーから「Jinrikisha (人力車)」を選択する。
ツリー タブ 項目 内容
Jinrikisha (人力車) 基本 ログ ログレベル  
スタックトレース  
環境 Gradleのバージョン Shafuで使うGradleのバージョン。
build.graldeに記述されているgradlewのバージョンは、Shafuでは使われない)
ネットワークモード  
Gradle User Home ディレクトリー  
プロジェクト プロジェクトプロパティー  
Java VM Java Home ディレクトリー  
システムプロパティー  
Jinrikisha (人力車)/
Asakusa Framework
  プロジェクトテンプレートカタログURL プロジェクトを作成するときに使うテンプレートの一覧が置かれている場所。
拡張機能 テスト時にエミュレーションモードを有効にする(AsakusaFW 0.7.2) ここにチェックを付けておくと、(build.gradleにasakusa-sdk-test-emulationを追加しなくても、EclipseのJUnitからは)スモールジョブ実行エンジンを使ったフローのテストが実行できる。
この設定を変更したら、Eclipseの設定を作り直す必要がある。
現在の設定 フレームワークのインストール先(ASAKUSA_HOME) 変更不可。
Hadoopコマンドの場所 変更不可。

使用方法

プロジェクトの作成

新しいAsakusaアプリケーション用のEclipseプロジェクトを作成する手順。

  1. Eclipseのメニューバーの「File」→「New」→「Other」を選択し、ダイアログを開く。
  2. 「Jinrikisha(人力車)」の下の「Gradleプロジェクトをテンプレートから生成」を選択して「次へ」
  3. プロジェクト名を入力して「次へ」
  4. プロジェクトテンプレートを選択する。
  5. 「プロジェクトをインポートする前にビルドを実行する」にチェックを付けて、「Finish」ボタンを押すと、プロジェクトが作成される。

テンプレートはAsakusaFWのバージョン毎・実行基盤毎(M3BPSpark等)に分かれて提供されている。[2021-11-03]
それらは後から変更することも出来るが、バージョン変更はかなり面倒(マイグレーションする必要がある)なので、最初に決めておきたい。
実行基盤を変える(あるいは追加する)のは簡単なので、M3BPかSparkを選んでおけばいい。


プロジェクトのインポート

既存のAsakusaアプリケーションをEclipseにインポートする手順。[2021-11-03]

  1. Eclipseのメニューバーの「File」→「Import」を選択し、ダイアログを開く。
  2. 「Jinrikisha(人力車)」の下の「Gradleプロジェクト」を選択して「次へ」
  3. インポートしたいAsakusaアプリケーションのディレクトリーを入力して「次へ」
  4. インポート対象プロジェクトが表示されるので、「プロジェクトを作成する前にビルドを実行する」にチェックを付けて「Finish」ボタンを押す。

コンテキストメニュー

パッケージエクスプローラー上でAsakusaプロジェクトを選択して右クリックすると、コンテキストメニュー(ポップアップメニュー)に「Jinrikisha(人力車)」というメニューが出る。
(Asakusaプロジェクト配下のファイルを右クリックしてもメニューは出ない。あくまで(ツリーのトップの)Asakusaプロジェクトを選択する必要がある)

以下のような事が実行できる。[2015-04-18]

メニュー 内容 同等のGradleコマンド
タスク名を指定してビルド Gradleのタスク名を入力して、任意のタスクを実行する。 gradlew タスク名
DMDLからデータモデルクラスを作成 DMDLをコンパイルして、データモデルクラスやインポーター・エクスポーターの雛形クラス等を生成する。
build/generated-sourcesの下にソースファイルが作られる。
DMDL EditorXのDMDLコンパイルと同等)
gradlew compileDMDL
テストデータ・テンプレートを作成 DMDLをコンパイルして、テストに使用するExcelファイルの雛形を生成する。
build/excelの下にデータモデル毎にExcelファイルが作られる。
gradlew generateTestbook
Asakusaバッチアプリケーションを生成 全バッチのコンパイルを行う。
build/プロジェクト名-batchapps.jarが作られる。
gradlew jarBatchapp
Asakusaデプロイメントアーカイブを生成 実行環境へリリースする為のアーカイブ(Asakusa Framework一式(バッチアプリケーションを含む))を生成する。
build/asakusafw-バージョン.tar.gzが作られる。
gradlew assemble
Asakusa開発環境の構成 Asakusa Frameworkのインストール 環境変数ASAKUSA_HOMEが指す場所に、Asakusa Framework一式をインストールする。
フローのテストの実行環境を作成する)
gradlew installAsakusafw
バッチアプリケーションの配備 環境変数ASAKUSA_HOMEが指す場所のbatchappsに、バッチアプリケーションを配備する。[2017-12-03]
これにより、開発環境上でAsakusaFW 0.10.0のAsakusa CLIを使う事が出来る。
 
Eclipseプロジェクト情報を再構成 build.graldeの記述を元に、Eclipseのプロジェクトの設定を作成する。
(このコマンドを実行するとXtextネイチャーの情報が消える。[2015-12-29]
 つまり、DMDL EditorXをインストールしてある場合、Xtextに依存している機能が使えなくなる。
 →Xtextネイチャーの情報を消さないようにする方法
gradlew cleanEclipse eclipse

実行時エラー

Gradleバージョンエラー

Shafuから(内部でGradleを実行する)コマンドを実行した時のエラー。[2015-12-06]

Gradleデーモンを準備しています...: 1.12
Asakusa Framework Gradle plug-ins recommend using Gradle 2.0 or later
The current Gradle version (Gradle 1.12) will not be supported in future releases

FAILURE: Build failed with an exception.

* Where:
Build file 'D:\workspace\example\build.gradle' line: 19

* What went wrong:
A problem occurred evaluating root project 'example'.
> org/codehaus/groovy/runtime/typehandling/ShortTypeHandling

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 1.592 secs
--
Gradleビルドはエラーにより停止しました
org.gradle.internal.exceptions.LocationAwareException: Build file 'D:\workspace\example\build.gradle' line: 19
A problem occurred evaluating root project 'example'.

build.gradleの19行目は「apply plugin: 'asakusafw-spark'」。つまり、Asakusa on Sparkの設定で、これ自体に問題は無い。

エラーになっているのは「org/codehaus/groovy/runtime/typehandling/ShortTypeHandling」。
どうも、このクラスが無いということらしい。


このエラーは、Gradleのバージョンが古いと起こるらしい。
コンソールメッセージの一番上を見れば分かるとおり、1.12で実行しているが、2.2.1にすると起きなくなる。

ShafuがGradleコマンドを実行する場合、build.gradle内に書かれたGradleバージョンは使用しない
Eclipseの設定で指定されたGradleバージョンを使用するが、デフォルトが1.12である。
したがって、この設定を変えればよい(build.gradleに書かれているGradleバージョンと同じにしておけばいいだろう)。


OperatorFactoryやFlowPartFactoryクラスが生成されない

通常だと、OperatorクラスFlowPartクラスを作ると(エラーが無いなら)Factoryクラスが自動生成されるのだが、それが生成されないケース。[2021-12-09]

Eclipseのエラーログを見ると、アノテーションプロセッサーでjavax.annotation.Generatedが見つからなくてエラーになっている。
(エラーログは、Eclipseのメニューバーの「Help」から「About Eclipse IDE」でダイアログを開き、「Instration Details」ボタンを押し、「View Error Log」ボタンを押すと見られる)

!MESSAGE Exception thrown by Java annotation processor com.asakusafw.operator.method.OperatorAnnotationProcessor@21efdaf
!STACK 0
java.lang.Exception: java.lang.NoClassDefFoundError: javax/annotation/Generated
!MESSAGE Exception thrown by Java annotation processor com.asakusafw.operator.flowpart.FlowPartAnnotationProcessor@7b3da091
!STACK 0
java.lang.Exception: java.lang.NoClassDefFoundError: javax/annotation/Generated

新しいバージョンのJavaではjavax.annotationが無くなった為らしい。


この場合、build.gradleにjavax.annotationを加えてやればアノテーションプロセッサーが働いてFactoryクラスが作られるようになる。

build.gradle:

〜
dependencies {
    eclipseAnnotationProcessor 'javax.annotation:javax.annotation-api:1.3.2'
}

AsakusaFW目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま