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]
Gradleを使ってAsakusaFW(0.5.2以降)の開発環境を構築する手順。
(ASAKUSA_HOMEまでは構築しないので、Flow DSL・Batch DSLのテストは実行できない。→ASAKUSA_HOMEの構築方法)
※Shafuを使えば、下記の手順全てがコマンドを一切入力せずに実施できる。[2014-12-13]
→Shafuを使ったプロジェクトの作成方法 [2015-04-18]
$ cd Eclipseワークスペースのディレクトリー $ tar xf ダウンロードした場所/asakusa-example-project-0.5.2.tar.gz
$ ls …asakusa-example-projectというディレクトリーが作られていることの確認 asakusa-example-project
$ mv asakusa-example-project example052
Windows(コマンドプロンプト) | UNIX(シェル) |
---|---|
> cd example052 > gradlew compileJava eclipse |
$ cd example052 $ ./gradlew compileJava eclipse |
Windows用のgradlew.batとUNIX用のgradlewシェルの両方があるので、WindowsでもUNIXでもほとんど同じように環境構築できる。
Mavenを使った構築方法と比べると、分かりやすくて非常にシンプル(笑)
(これさえあればJinrikishaは要らないんじゃね?と一瞬思ったが、あちらはHadoopやEclipseもインストールしてくれるのだった)
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
」を実行すると、指定できるタスクの一覧が表示される。
AsakusaFW 0.5.3で、gradlewを使ってEclipseプロジェクトの設定を生成した際に設定値がプロパティーファイルとして出力されるようになった。[2014-01-10]
今までのbuild.propertiesファイルに書かれていたような内容が出力される。
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
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アプリケーションではダウンロードがエラーになりうる。
(過去にダウンロードしている場合はそのファイルがそのまま使われるので問題ないが、例えば新しいパソコンで新規にビルド(ダウンロード)を行うとエラーになる)
gradlewを使って初めてビルドするときにGradleのファイルがダウンロードされるが、そのURLがhttpだとエラーになる。
$ ./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に修正してやればよい。
〜 distributionUrl=https\://services.gradle.org/distributions/gradle-2.11-bin.zip
初めてビルドするときに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
)を指す。
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.gradle 〜 Replace 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 〜