S-JIS[2013-11-23/2020-04-07] 変更履歴

Asakusa Framework Gradle Plugin

Asakusa Framework0.5.2で追加されたGradleによる開発方法のメモ。


概要

Asakusa Framework 0.5.2.より前では、AsakusaFWの環境構築やコンパイル等にはMavenを使っていた。

AsakusaFW 0.5.2ではGradle Pluginが提供され、環境構築やコンパイルはGradleで行えるようになった。
内部的にはMavenの仕組みを使っているが、Maven自体は不要。

特徴の比較
  Maven Gradle
前提環境 Mavenをインストールしておく必要がある。 特に無し。
(Javaだけインストールされていればよい)
定義ファイル pom.xml
(約390行)
build.gradle
(約40行)
build.properties
アーキタイプ 開発環境構築時にアーキタイプを選択する。 開発環境構築時にプロジェクトテンプレートを選択する。[2020-04-07]
SparkとかM3BPとか)
DMDLコンパイル DMDLのコンパイルを行うと、
Javaソースと共に毎回Excelファイルが生成される。
Javaソースの生成とExcelファイル生成の
コマンドが分離している。
ファイルの生成先 targetディレクトリーの下 buildディレクトリーの下

実際には、EclipseプラグインのShafuを利用して環境構築する方が楽。[2020-04-07]


開発環境構築(Windows・UNIX)

Gradleを使ってAsakusaFW(0.5.2以降)の開発環境を構築する手順。
(ASAKUSA_HOMEまでは構築しないので、Flow DSLBatch DSLのテストは実行できない。→ASAKUSA_HOMEの構築方法

Shafuを使えば、下記の手順全てがコマンドを一切入力せずに実施できる。[2014-12-13]
 →Shafuを使ったプロジェクトの作成方法 [2015-04-18]

  1. Asakusa Frameworkのプロジェクトテンプレートをダウンロードする。
  2. プロジェクトテンプレートを解凍する。
    $ cd Eclipseワークスペースのディレクトリー
    $ tar xf ダウンロードした場所/asakusa-example-project-0.5.2.tar.gz
    $ ls		…asakusa-example-projectというディレクトリーが作られていることの確認
    asakusa-example-project
  3. ディレクトリー名を自分用のAsakusaプロジェクト名に変更する。
    $ mv asakusa-example-project example052
  4. Eclipseプロジェクト用の設定を生成する。
    (色々なjarファイルがダウンロードされるので、初回は時間がかかる)
    Windows(コマンドプロンプト) UNIX(シェル)
    > cd example052
    > gradlew compileJava eclipse
    $ cd example052
    $ ./gradlew compileJava eclipse
  5. Eclipseにプロジェクトをインポートする。
  6. プロジェクトのテキストファイルのエンコーディングをUTF-8にする。(WindowsではデフォルトがMS932なので)

Windows用のgradlew.batとUNIX用のgradlewシェルの両方があるので、WindowsでもUNIXでもほとんど同じように環境構築できる。

Mavenを使った構築方法と比べると、分かりやすくて非常にシンプル(笑)

(これさえあればJinrikishaは要らないんじゃね?と一瞬思ったが、あちらはHadoopやEclipseもインストールしてくれるのだった)


Asakusa Gradle Pluginのコマンド

Asakusa Gradleプラグインで使えるコマンド(Gradleのタスク)の抜粋。

  Gradle 備考 従来のMaven相当
AsakusaFWのバージョン確認 gradlew asakusaVersion 0.8.0以降。[2016-04-10]
AsakusaFWやプラグインのバージョンを表示する。
 
Gradleラッパーのアップデート gradlew asakusaUpgrade 0.8.0以降。[2016-04-12]
Gradleラッパーコマンドをアップデート(最新版に更新)する。
 
ワークのクリア gradlew clean   mvn clean
Eclipse用のプロジェクト設定の生成 gradlew eclipse .project.classpathが作られる。 mvn eclipse:eclipse
モデルクラスの生成(DMDLのコンパイル) gradlew compileDMDL プロジェクト/build/generated-sourcesの下に作られる。 mvn generate-sources
テストデータ定義用Excelファイルの生成 gradlew generateTestbook プロジェクト/build/excelの下に作られる。 mvn generate-sources
Javaのコンパイル gradlew compileJava DMDLのコンパイルも行われる。 mvn package
バッチアプリケーションの生成 gradlew compileBatchapp 0.7.0以前は、これによってMapReduce版バッチアプリケーションが生成されていた。[2016-04-10]
0.8.0以降は、build.gradleに記載されている全種類のバッチアプリケーションを生成する。
mvn package
MapReduce版バッチアプリケーションの生成 gradlew mapreduceCompileBatchapps 0.8.0以降。[2016-04-10]
MapReduce(Hadoop)版バッチアプリケーションを生成する。
プロジェクト/build/batchcが作られる。
batchc/バッチ名/opt/dsl-analysisの下にGraphvizのファイル(拡張子dot)が作られる。
 
Spark版バッチアプリケーションの生成 gradlew sparkCompileBatchapps Spark版バッチアプリケーションを生成する。[2015-12-06]
プロジェクト/build/spark-batchappsが作られる。
 
M3BP用バッチアプリケーションの生成 gradlew m3bpCompileBatchapps M3BP用バッチアプリケーションを生成する。[2016-04-12]  
バッチアプリケーションのjarファイル生成 gradlew jarBatchapp プロジェクト/build/プロジェクト名-batchapps.jarが作られる。 mvn package
開発環境向けASAKUSA_HOME生成 gradlew installAsakusafw 環境変数ASAKUSA_HOMEを事前に定義しておく必要がある。
ASAKUSA_HOMEが指す場所に実行環境一式がインストールされる。
Framework Organizer
mvn package antrun:run
運用環境向けASAKUSA_HOMEアーカイブ生成 gradlew assembleAsakusafw プロジェクト/build/asakusafw-0.5.2.tar.gzが作られる。
(これを運用環境のASAKUSA_HOMEの下に展開する)
Framework Organizer
mvn package
gradlew assemble 0.7.0以降。[2015-12-19]

細かいタスクは他にもいっぱいある。「gradlew :task」を実行すると、指定できるタスクの一覧が表示される。

Shafuで代替できる操作


プロパティーファイル

AsakusaFW 0.5.3で、gradlewを使ってEclipseプロジェクトの設定を生成した際に設定値がプロパティーファイルとして出力されるようになった。[2014-01-10]
今までのbuild.propertiesファイルに書かれていたような内容が出力される。

プロジェクト/.settings/com.asakusafw.asakusafw.prefs:

com.asaksuafw.asakusafw.asakusafwVersion=0.5.3
com.asaksuafw.asakusafw.maxHeapSize=1024m
com.asaksuafw.asakusafw.logbackConf=src/test/resources/logback-test.xml
com.asaksuafw.asakusafw.dmdl.dmdlEncoding=UTF-8
com.asaksuafw.asakusafw.dmdl.dmdlSourceDirectory=src/main/dmdl
com.asaksuafw.asakusafw.modelgen.modelgenSourcePackage=com.example.modelgen
com.asaksuafw.asakusafw.modelgen.modelgenSourceDirectory=build/generated-sources/modelgen
com.asaksuafw.asakusafw.javac.annotationSourceDirectory=build/generated-sources/annotations
com.asaksuafw.asakusafw.javac.sourceEncoding=UTF-8
com.asaksuafw.asakusafw.javac.sourceCompatibility=1.6
com.asaksuafw.asakusafw.javac.targetCompatibility=1.6
com.asaksuafw.asakusafw.compiler.compiledSourcePackage=com.example.batchapp
com.asaksuafw.asakusafw.compiler.compiledSourceDirectory=build/batchc
com.asaksuafw.asakusafw.compiler.compilerOptions=
com.asaksuafw.asakusafw.compiler.compilerWorkDirectory=build/batchcwork
com.asaksuafw.asakusafw.compiler.hadoopWorkDirectory=build/hadoopwork/${execution_id}
com.asaksuafw.asakusafw.testtools.testDataSheetFormat=ALL
com.asaksuafw.asakusafw.testtools.testDataSheetDirectory=build/excel

MavenとGradleのHTTPS化

2020/1/15に、Maven Centralとgradle.orgのHTTP接続が無効化された(HTTPS接続のみになった)。[2020-04-07]
→AsakusaFWドキュメントのMaven Centralとgradle.orgのHTTP接続無効化の影響について

Gradleコマンドを使って環境構築(ライブラリーをダウンロード(Maven Central Repositoryへアクセス))する際に、今まではhttpでアクセスしていたが、httpではエラーとなり、httpsでないとアクセスできない。
AsakusaFW 0.10.4では使用するURLがhttpsに変更されたので問題ないが、それより前のAsakusaアプリケーションではダウンロードがエラーになりうる。
(過去にダウンロードしている場合はそのファイルがそのまま使われるので問題ないが、例えば新しいパソコンで新規にビルド(ダウンロード)を行うとエラーになる)


GradleのHTTPS対応

gradlewを使って初めてビルドするときにGradleのファイルがダウンロードされるが、そのURLがhttpだとエラーになる。

Gradleのエラーの例:

$ ./gradlew cleanEclipse eclipse
Downloading http://services.gradle.org/distributions/gradle-2.11-bin.zip

Exception in thread "main" java.io.IOException: Server returned HTTP response code: 403 for URL: http://services.gradle.org/distributions/gradle-2.11-bin.zip
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1876)
	〜

これを回避する為には、URLをhttpからhttpsに修正してやればよい。

Asakusaプロジェクト/.buildtools/gradlew.properties:

〜
distributionUrl=https\://services.gradle.org/distributions/gradle-2.11-bin.zip

MavenのHTTPS対応

初めてビルドするときにMaven Central Repositoryからライブラリーのjarファイル等がダウンロードされるが、そのURLがhttpだとエラーになる。

エラーの例:

$ ./gradlew cleanEclipse eclipse
:cleanEclipseClasspath
:cleanEclipseJdt
:cleanEclipseProject
:cleanEclipse
:eclipseClasspath
Could not resolve: com.sun.jersey:jersey-json:1.19
:eclipseJdt
:eclipseProject
:eclipse

BUILD SUCCESSFUL

※ビルド自体は正常終了しているが、生成されたクラスパスはエラーの状態になっている

これを回避する為には、URLをhttpからhttpsに変更する為のGradleの初期化スクリプトを用意する。
初期化スクリプトは「ユーザーのホームディレクトリー/.gradle/init.d」の下に置いておくのが便利。
なお、ホームディレクトリーとは、UNIXの場合は$HOME(例:/home/hishidama)だが、Windowsの場合は(Cygwinの場合も)%USERPROFILE%(例:C:\Users\hishidama)を指す。

ホームディレクトリー/.gradle/init.d/replace-repo-url-https.gradle:

def targetHosts = [
    'repo1.maven.org',
    'repo.maven.apache.org',
    'asakusafw.s3.amazonaws.com'
]

allprojects {
    project.repositories.withType(MavenArtifactRepository) { repository ->
        if ( repository.url.scheme == 'http' && targetHosts.contains(repository.url.host) ) {
            URI newUrl = new URI("https", repository.url.authority, repository.url.path, repository.url.query, repository.url.fragment)
            logger.info("Replace repository url: ${repository.url} -> ${newUrl}")
            repository.url = newUrl
        }
    }
}
logger.info "applied init.d script: replace-repo-url-https.gradle"

※初期化スクリプトの内容はAsakusaFWドキュメントから転載

これでgardlewコマンドを実行すれば、jarファイルがhttpsでダウンロードされるようになる。

ちなみに、-iオプションを付けてinfoログを出してみると、初期化スクリプトが読み込まれていればメッセージが表示される。

$ ./gradlew -i cleanEclipse eclipse
Starting Build
applied init.d script: replace-repo-url-https.gradleReplace repository url: http://repo1.maven.org/maven2/ -> https://repo1.maven.org/maven2/
Replace repository url: http://asakusafw.s3.amazonaws.com/maven/releases -> https://asakusafw.s3.amazonaws.com/maven/releases
Replace repository url: http://asakusafw.s3.amazonaws.com/maven/snapshots -> https://asakusafw.s3.amazonaws.com/maven/snapshots

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