109
今日から始める 入門ハンズオン 2015.08.28 Spring in Summer R3-2 #jsug_sis #jggug

Spring in-summer-gradle-hands on-withanswers

Embed Size (px)

Citation preview

Page 1: Spring in-summer-gradle-hands on-withanswers

今日から始める 入門ハンズオン

2015.08.28 Spring in Summer R3-2 #jsug_sis #jggug

Page 2: Spring in-summer-gradle-hands on-withanswers

受講対象者• これからGradleを始める予定の人

• Gradleを始めたばかりの人

• Gradleに興味がある人

• pom地獄から脱出したい人Gradle初心者向けの内容となっています。 それなりに使っている方は、今からでも

裏セッションに移動することをお勧めします。

Page 3: Spring in-summer-gradle-hands on-withanswers

アジェンダ

• イントロダクション

• 超速Gradle入門

• ハンズオン

• Q&A

Page 4: Spring in-summer-gradle-hands on-withanswers

イントロダクション

Page 5: Spring in-summer-gradle-hands on-withanswers

ハンズオン資料のコピー• USBを前から回しています。以下をマシンにコピーし、Gradle-Hands-on/README.txt を読んでセットアップを行ってください。

• [必須]:Gradle-Hands-on

• [任意]:JDK8-<OS-xxbit>

• JDKインストールしていない人のみ

Page 6: Spring in-summer-gradle-hands on-withanswers

自己紹介• 綿引 琢磨(わたびき たくま)

• 株式会社デライトテクノロジーズ 代表取締役

• JGGUG運営委員

• @bikisuke

• 共著『Gradle徹底入門』

Page 7: Spring in-summer-gradle-hands on-withanswers
Page 8: Spring in-summer-gradle-hands on-withanswers

「徹底入門」というタイトルにふさわしい内容http://www.amazon.co.jp/product-reviews/4798136433/ref=dp_db_cm_cr_acr_txt?ie=UTF8&showViewpoints=1

これまで手厚くサポートされたビルドツールの本を見たことがありませんでした。http://grimrose.blogspot.jp/2014/12/gradle.html

これ1冊あればググる必要ないのではという安心感があるhttp://booklog.jp/item/1/4798136433

Gradle”感じる徹底ぶりで、一読の価値ありです。http://lino.hatenablog.jp/entry/gradleintroduction

「入門」とあるけど、きちんとアーキテクチャから解説されているので、十分な知識が得られるだろう。http://www.ruimo.com/2015/01/12/1421066460000.html

内容が濃いhttp://www.amazon.co.jp/review/R1UIVFAYX4GEVR/ref=cm_cr_dp_title?ie=UTF8&ASIN=4798136433&channel=detail-glance&nodeID=465392&store=books

Page 9: Spring in-summer-gradle-hands on-withanswers

絶賛発売中会場後

ろにて

Page 10: Spring in-summer-gradle-hands on-withanswers

アンケート1• Q. 現在、何でビルドしていますか?

1. Antでビルドしている

2. Mavenでビルドしている

3. eclipseがやってくれてます

4. もちろん javac です

5. その他

Page 11: Spring in-summer-gradle-hands on-withanswers

アンケート2• Q. Gradleへの移行を検討していますか?

1. すぐに移行する予定

2. 移行に不安があり、決め兼ねている

3. 今日のハンズオン次第で考えたい

4. 今のところ予定はない

5. XMLが大好物なのでありえない

Page 12: Spring in-summer-gradle-hands on-withanswers

アンケート3• Q. Gradleへの移行の障壁は何ですか?

1. お客様や上司の説得

2. 社内にデキるエンジニアがいない

3. 今のビルドスクリプトが難解

4. 漠然とした不安感

5. その他

Page 13: Spring in-summer-gradle-hands on-withanswers

超速Gradle入門

Page 14: Spring in-summer-gradle-hands on-withanswers

Gradleとは• OSSの自動化ツール(Apache License 2.0)

• 他のツールより優れている(点が多い)

• ビルドスクリプトはGroovy DSLで記述

• 拡張しやすいアーキテクチャを採用

• 最新バージョンは2.6(2015年8月時点)

Page 15: Spring in-summer-gradle-hands on-withanswers

主な特徴• ビルドスクリプトが簡潔かつ柔軟

• プラグインを作りやすい

• マルチプロジェクトを扱いやすい

• 既存ビルドツールの資産を活用できる

• さまざまな言語に対応

• Gradleラッパーが便利

Page 16: Spring in-summer-gradle-hands on-withanswers

簡潔さと柔軟さ• 実行単位の「タスク」を柔軟に記述

• 既存タスクの拡張も可能

• Groovy DSLで記述することで実現

• XMLではあり得ない簡潔さ

• ビルドスクリプトの記述はGroovyのコードとして実行される

• Javaのコードを直接書くことも可能

Page 17: Spring in-summer-gradle-hands on-withanswers

柔軟な記述task hello << { println ‘Hello, Gradle’}

タスクの定義

Page 18: Spring in-summer-gradle-hands on-withanswers

柔軟な記述task hello << { println new Messenger().greet(‘Gradle’)}

public class Messenger { private String message = “Hello, “; public String greet(String name) { return message + name + “!”; }}

スクリプト内でクラスを定義することも可能

Page 19: Spring in-summer-gradle-hands on-withanswers

作りやすいプラグイン• プラグイン作成の敷居が低い

• 用途に応じてプラグインも柔軟に

• ビルドスクリプトに直接

• buildSrcプロジェクトとして

• プラグインモジュールとして

Page 20: Spring in-summer-gradle-hands on-withanswers

マルチプロジェクト• 設定スクリプトでプロジェクト管理

• 2つのレイアウトをサポート

• 階層型レイアウト

• フラット型レイアウト

• ビルド定義の記述場所も柔軟に

Page 21: Spring in-summer-gradle-hands on-withanswers

既存ツールの資産活用• Ant

• build.xmlを実行可能

• Maven/Ivy

• MavenやIvyのリポジトリを利用可能

Page 22: Spring in-summer-gradle-hands on-withanswers

マルチ言語対応• JVM

• Java, Groovy, Scala

• Android

• Android Studio のビルドツールとして採用

• Native

• C, C++, Objective-C, など

• その他

• C#(コミュニティプラグイン)など

Page 23: Spring in-summer-gradle-hands on-withanswers

Gradleラッパー• ユーザーによる明示的なインストールや設定をせずにビルド実行を可能に

• 一元的な実行環境の管理と配布により、さまざまな用途に利用可能

• 独自設定を施したGradleの展開

• ツールの実行ランチャーとして

Page 24: Spring in-summer-gradle-hands on-withanswers

はじめてのGradle

• 基本の3ステップ

• Gradleのインストール

• ビルドスクリプトの作成

• ビルドの実行

Page 25: Spring in-summer-gradle-hands on-withanswers

Gradleのインストール• 前提条件: JDK6以上(JDK8推奨)

• Mac/Unix系:GVMが便利

•http://gvmtool.net/ • $ gvm i gradle

• Windows: 公式サイトからダウンロード

•http://www.gradle.org/downloads • ZIP解凍して、環境変数Pathに<GRADLE_HOME>\bin

Page 26: Spring in-summer-gradle-hands on-withanswers

GVMによるインストール$ gvm i gradle

Downloading: gradle 2.6

% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 354 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0 100 62.4M 100 62.4M 0 0 3495k 0 0:00:18 0:00:18 --:--:-- 4370k

Installing: gradle 2.6 Done installing!

Do you want gradle 2.6 to be set as default? (Y/n): Y

Setting gradle 2.6 as default.

Page 27: Spring in-summer-gradle-hands on-withanswers

ビルドスクリプトの作成• 「build.gradle」というファイルをプロジェクト直下に作成し、各種定義を記述

• プラグイン

• コンフィグレーション

• 依存関係解決

• タスク

• etc.

Page 28: Spring in-summer-gradle-hands on-withanswers

ビルドの実行• gradleコマンドに実行したいタスクを指定

• gradle <タスク> ...

• コマンドライン引数でログレベル変更可能

• -i : info

• -q : quiet

• -d : debug

• -s : stacktrace

Page 29: Spring in-summer-gradle-hands on-withanswers

ハンズオン

Page 30: Spring in-summer-gradle-hands on-withanswers

#0: ウォーミングアップ

Page 31: Spring in-summer-gradle-hands on-withanswers

#0 動作確認

1. 環境準備(終わってない方)

2. バージョン情報の表示

3. タスク一覧の表示

Page 32: Spring in-summer-gradle-hands on-withanswers

環境準備• JDKを入れていない人はJDKインストールと環境変数の設定をしてください。

• Gradleは任意の場所に格納し、環境変数を設定してください。

• 新しくコマンドシェルまたはコマンドプロンプトを開いてください。

• 「repository-manager」ディレクトリに移動し、 「gradle setupRepos」を実行してください。

Page 33: Spring in-summer-gradle-hands on-withanswers

バージョン情報の表示• バージョン情報を表示するには以下のオプションを指定して、Gradleを実行します。

‣ gradle -v (もしくは --version)

• Gradleのバージョンの他、GroovyやAnt, JVM, OS などの情報が出力されていることを確認してください。

Page 34: Spring in-summer-gradle-hands on-withanswers

タスク一覧の表示• タスク一覧を表示するには以下のGradleタスクを実行します。

‣ gradle tasks

• 実行可能なタスクの一覧一覧が表示されることを確認してください。

Page 35: Spring in-summer-gradle-hands on-withanswers

#0 補足説明

Page 36: Spring in-summer-gradle-hands on-withanswers

#0-2 タスク一覧の表示•Gradle には、予め使用可能なタスクが用意されています。これらは「組み込みタスク(built-in task)」呼びます。

•タスクは所属するグループ別に一覧表示され、説明(description)が設定されている場合には説明も表示されます。

•ビルドスクリプトで定義したタスクや使用するプラグインに含まれるタスクもこのタスク一覧に表示されます。

Page 37: Spring in-summer-gradle-hands on-withanswers

#1: はじめてのGradle

Page 38: Spring in-summer-gradle-hands on-withanswers

#1-1 プロジェクトの作成とビルド

1. ディレクトリの移動

2. initタスクの実行

3. build.gradleの修正

4. ビルドの実行

5. ビルド成果物の確認

Page 39: Spring in-summer-gradle-hands on-withanswers

ディレクトリの移動• <HANDS-ON_HOME>/work1/create-and-buildに移動します。

• ディレクトリ内に何もファイルがないことを確認してください。

Page 40: Spring in-summer-gradle-hands on-withanswers

initタスクの実行• 組み込みタスクであるinitタスクを以下のタスクオプションを指定して実行します。

‣ gradle init --type java-library

• 「BUILD SUCCESSFUL」となることを確認してください。

• ファイルやディレクトリが自動生成されていることを確認してください。

Page 41: Spring in-summer-gradle-hands on-withanswers

build.gradleの修正• テキストエディタでbuild.gradleを開き、以下の修正を行います。

‣ 17行目 jcenter() をコメントアウト

‣ 18行目 mavenLocal() を追加

Page 42: Spring in-summer-gradle-hands on-withanswers

ビルドの実行• buildタスクを実行します。

‣ gradle build

• 「BUILD SUCCESSFUL」となることを確認してください。

Page 43: Spring in-summer-gradle-hands on-withanswers

ビルド成果物の確認• <HANDS-ON_HOME>/work1/create-and-build/buildに移動し、以下のディレクトリのファイルを確認します。

• libs

• reports

• ディレクトリ内に何もファイルがないことを確認してください。

Page 44: Spring in-summer-gradle-hands on-withanswers

#1-1 補足説明

Page 45: Spring in-summer-gradle-hands on-withanswers

#1-1-2 initタスク•組み込みタスクのひとつ

•プロジェクトやビルドスクリプトの自動生成を行う

•生成したい内容に応じてタスクオプションを指定する

•basic : ビルドスクリプト、Gradleラッパー生成

•groovy-library : basic + Groovy規約ディレクトリ生成

•java-library : basic + Java規約ディレクトリ生成

•pom : pom.xmlを基に生成

•scala-library : basic + Scala規約ディレクトリ生成

Page 46: Spring in-summer-gradle-hands on-withanswers

#1-1-3 repositoriesの修正•「repositories」には、依存関係を解決する際に参照するリポジトリの設定を行います。

•外部のリポジトリを参照する場合は以下のように指定します。

•mavenCentral() // Mavenセントラル

•jcenter() // initタスクのデフォルト

•本タスクでは、今回ネットワーク未接続の環境のため、ローカルのファイルリポジトリを参照するように修正しましたが、ネットワークがあれば修正は不要です。

Page 47: Spring in-summer-gradle-hands on-withanswers

#1-1-5 ビルド成果物の確認•ビルドの実行により作成された成果物は、<PROJECT_HOME>/buildディレクトリに置かれます。

•build/classes : main及びtestのクラスファイル

•build/libs : JARファイルやWARファイル等

•build/reports : テスト結果を集計したHTMLファイル

•build/resources : main及びtestのリソースファイル

•build/test-results : テスト結果

Page 48: Spring in-summer-gradle-hands on-withanswers

#1-2 既存プロジェクトへの適用1. ディレクトリの移動

2. initタスクの実行

3. build.gradleの修正

4. ビルドの実行

5. WARファイルのデプロイ

6. アプリの動作確認

Page 49: Spring in-summer-gradle-hands on-withanswers

ディレクトリの移動• <HANDS-ON_HOME>/work1/migrate-from-mavenに移動します。

• ディレクトリ内にsrcとpom.xmlファイルがあることを確認してください。

Page 50: Spring in-summer-gradle-hands on-withanswers

initタスクの実行• initタスクをタスクオプションなしで実行します。

‣ gradle init

• 「BUILD SUCCESSFUL」となることを確認してください。

• ビルドスクリプやGradleラッパーが自動生成されていることを確認してください。

Page 51: Spring in-summer-gradle-hands on-withanswers

build.gradleの修正• テキストエディタでbuild.gradleを開き、以下の修正を行います。

‣ 1行目 apply plugin ‘java’ をコメントアウト

‣ 2行目 apply plugin ‘war’ を追加

‣ 10,11行目 「1.5」を「1.8」に変更

‣ 17行目 maven {} をコメントアウト

‣ 18行目 mavenLocal() を追加

‣ 23行目に war { を追加

‣ 24行目に baseName = ‘helloApp’ を追加

‣ 25行目に version = ‘’ を追加

‣ 26行目に } を追加

Page 52: Spring in-summer-gradle-hands on-withanswers

ビルドの実行• buildタスクを実行します。

‣ gradle build

• 「BUILD SUCCESSFUL」となることを確認してください。

• build/libsディレクトリにWARファイルが作成されることを確認してください。

Page 53: Spring in-summer-gradle-hands on-withanswers

WARファイルのデプロイ• 作成したhelloApp.warをTomcatにコピーします。

• cd build/libs/helloApp.war <HANDS-ON_HOME>/tomcat/webapps/

• tomcat/webapps直下にWARファイルがコピーされていることを確認してください。

Page 54: Spring in-summer-gradle-hands on-withanswers

アプリの動作確認• Tomcatを起動し、ブラウザから以下のアドレスにアクセスします。

• Tomcatの起動シェル: tomcat/bin/start.sh(start.bat)

• http://localhost:8080/helloApp/

• ブラウザに「Hello!!!!」と表示されることを確認してください。

Page 55: Spring in-summer-gradle-hands on-withanswers

#1-2 補足説明

Page 56: Spring in-summer-gradle-hands on-withanswers

#1-2-2 initタスク

•コマンドを実行する場所にpom.xmlが存在する場合は、タスクオプションなしで「--type pom」と同様の自動生成を行います。

•pomベースで生成される場合は、対応可能な定義のみpom.xmlの内容を変換してbuild.gradleに反映されます。

Page 57: Spring in-summer-gradle-hands on-withanswers

#1-2-3 build.gradleの修正•GradleはMavenのディレクトリ規約を踏襲しているため、変更することなく、そのまま適用できます。

•pom.xmlの<packaging>の内容は反映されないため、JAR以外の場合はプラグインを変更する必要があります。

•Mavenのprovidedスコープは、GradleではWarプラグインの設定のため、Javaプラグインでは使用することができません。

Page 58: Spring in-summer-gradle-hands on-withanswers

#2: プラグインの使い方

Page 59: Spring in-summer-gradle-hands on-withanswers

プラグインとは• Gradleのビルド機能を拡張する仕組み

• ほとんどの機能はプラグインによって提供されている

• 通常、プラグインによって「タスク」「プロパティ」「規約」などが追加される

• Gradleのプラグインは主に3種類に分類される

• 標準プラグイン

• コミュニティプラグイン

• カスタムプラグイン

Page 60: Spring in-summer-gradle-hands on-withanswers

プラグインの記述// 従来の記述方法apply plugin: ‘<プラグインID>’

// Gradle2.1からの記述方法plugins { id ‘<プラグインID>’

}

Page 61: Spring in-summer-gradle-hands on-withanswers

標準プラグインカテゴリ プラグイン名 プラグインID 概要

言語 Javaプラグイン javaJavaプロジェクトのビ

ルド機能

言語 Groovyプラグイン groovyGroovyプロジェクトの

ビルド機能

統合 Applicationプラグイン application Javaプロジェクトのビルドとコマンドライン実行機能

統合 Warプラグイン war JavaプロジェクトのビルドとWARファイル生成機能

開発 Checkstyleプラグイン checkstyleJavaソースの静的解析とレポート出力機能

開発 PMDプラグイン pmdJavaソースの静的解析とレポート出力機能

Page 62: Spring in-summer-gradle-hands on-withanswers

コミュニティプラグインカテゴリ プラグイン名 プラグインID 概要

統合 Tomcatプラグイン com.bmuschko.tomcat 組み込みTomcatの起動停止やデプロイ機能

言語 SSHプラグイン org.hidetake.ssh SSHによるコマンド実行やファイル転送機能

統合 Bintrayプラグイン com.jfrog.bintray Bintrayへのアーティファクト発行機能

統合 Spring-Boot プラグイン spring-boot Spring-boot実行機能

Page 63: Spring in-summer-gradle-hands on-withanswers

カスタムプラグインapply plugin: HelloPlugin

class HelloPlugin implements Plugin<Project> { void apply(Project project) { project.task(‘hello’) << { println ‘Hello, Gradle!’ } }}

Page 64: Spring in-summer-gradle-hands on-withanswers

#2-1 Javaプラグイン

1. ディレクトリの移動

2. タスク詳細の確認

3. タスクの実行と確認

Page 65: Spring in-summer-gradle-hands on-withanswers

ディレクトリの移動• <HANDS-ON_HOME>/work2/java-pluginに移動します。

• ディレクトリ内にsrcとbuild.gradleファイルがあることを確認してください。

Page 66: Spring in-summer-gradle-hands on-withanswers

タスク詳細の確認• タスク一覧およびヘルプを表示して、タスクの詳細情報を確認します。

‣ gradle tasks --all

‣ gradle help --task <タスク>

• タスクの定義方法のスライドを参考に定義してください。

Page 67: Spring in-summer-gradle-hands on-withanswers

タスクの実行と確認• 定義したタスクを実行します。

‣ gradle <タスク名>

• 「BUILD SUCCESSFUL」となることを確認してください。

• 期待通りの結果が出力されていることを確認してください。

Page 68: Spring in-summer-gradle-hands on-withanswers

#2-2 Warプラグイン

1. ディレクトリの移動

2. タスク詳細の確認

3. タスクの実行と確認

Page 69: Spring in-summer-gradle-hands on-withanswers

ディレクトリの移動• <HANDS-ON_HOME>/work2/war-pluginに移動します。

• ディレクトリ内にsrcとbuild.gradleファイルがあることを確認してください。

Page 70: Spring in-summer-gradle-hands on-withanswers

タスク詳細の確認• タスク一覧およびヘルプを表示して、タスクの詳細情報を確認します。

‣ gradle tasks --all

‣ gradle help --task <タスク>

• タスクの定義方法のスライドを参考に定義してください。

Page 71: Spring in-summer-gradle-hands on-withanswers

タスクの実行と確認• 定義したタスクを実行します。

‣ gradle <タスク名>

• 「BUILD SUCCESSFUL」となることを確認してください。

• 期待通りの結果が出力されていることを確認してください。

Page 72: Spring in-summer-gradle-hands on-withanswers

#2-3 Applicationプラグイン

1. ディレクトリの移動

2. タスク詳細の確認

3. タスクの実行と確認

Page 73: Spring in-summer-gradle-hands on-withanswers

ディレクトリの移動• <HANDS-ON_HOME>/work2/app-pluginに移動します。

• ディレクトリ内にsrcとbuild.gradleファイルがあることを確認してください。

Page 74: Spring in-summer-gradle-hands on-withanswers

タスク詳細の確認• タスク一覧およびヘルプを表示して、タスクの詳細情報を確認します。

‣ gradle tasks --all

‣ gradle help --task <タスク>

• タスクの定義方法のスライドを参考に定義してください。

Page 75: Spring in-summer-gradle-hands on-withanswers

タスクの実行と確認• 定義したタスクを実行します。

‣ gradle <タスク名>

• 「BUILD SUCCESSFUL」となることを確認してください。

• 期待通りの結果が出力されていることを確認してください。

Page 76: Spring in-summer-gradle-hands on-withanswers

#3: タスクの定義

Page 77: Spring in-summer-gradle-hands on-withanswers

タスクとは

• Gradleで実行する処理の単位

• 内部的には「actions」というプロパティで実行処理を管理している

• タスク間に依存関係を持たせたり、実行順を制御したりすることが可能

Page 78: Spring in-summer-gradle-hands on-withanswers

タスクの定義方法// 最もシンプルな記法task <タスク名> << {

// タスク処理}

// 例task hello << { println ‘Hello, Gradle!’}

Page 79: Spring in-summer-gradle-hands on-withanswers

タスクの定義方法// 前と似ているが異なる記法task <タスク名> {

// タスクの設定 <タスクAPI> { // タスクの処理 }

}

// 例task hello { description = ‘helloタスクです’

doLast { println ‘Hello, Gradle!’ }}

Page 80: Spring in-summer-gradle-hands on-withanswers

タスクの定義方法// Gradle標準の汎用タスクを使用した記法task <タスク名>(type: <汎用タスク>) {

// タスク処理}

// 例task myDelete (type: Delete) { delete ‘trash/files’}

Page 81: Spring in-summer-gradle-hands on-withanswers

#3-1 タスクの作成

1. ディレクトリの移動

2. タスクの定義

3. タスクの実行と確認

Page 82: Spring in-summer-gradle-hands on-withanswers

ディレクトリの移動• <HANDS-ON_HOME>/work3/task-definitionsに移動します。

• ディレクトリ内にbuild.gradleファイルがあることを確認してください。

Page 83: Spring in-summer-gradle-hands on-withanswers

タスクの定義• build.gradleをエディタで開き、コメントに従って、各タスクを定義します。

‣ コメント参照

• タスクの定義方法のスライドを参考に定義してください。

Page 84: Spring in-summer-gradle-hands on-withanswers

タスクの実行と確認• 定義したタスクを実行します。

‣ gradle <タスク名>

• 「BUILD SUCCESSFUL」となることを確認してください。

• 期待通りの結果が出力されていることを確認してください。

Page 85: Spring in-summer-gradle-hands on-withanswers

#3-1: 回答例

Page 86: Spring in-summer-gradle-hands on-withanswers

/** * 3-1-1. 「Hello, Gradle!」と出力するHelloタスクを作成してください。 * 出力には「println '文字列'」が使えます。 */task Hello << { println 'Hello, Gradle!'}

/** * 3-1-2. 3-1-1で作成した「Helloタスク」と同じ処理をdoLastを使った *「Hello2タスク」として作成してください。 */task Hello2 { doLast { println 'Hello, Gradle!' }

build.gradle(1/2)

Page 87: Spring in-summer-gradle-hands on-withanswers

/** * 3-1-3. 「from/resource.txt」を「to」ディレクトリにコピーしてください。 * ファイルのコピーには Copyタスクを使用できます。 * task xxx(type: Copy) { * from 'コピー元'

* into 'コピー先'

* } */

task myCopy(type: Copy) { from 'from/resource.txt' into 'to'}

build.gradle(2/2)

Page 88: Spring in-summer-gradle-hands on-withanswers

タスクの制御• 依存関係

• 依存するタスクがある場合、実行時に依存関係を遡って各タスクを実行する

• 順序付け

• 順序付けされているタスクが、同時に実行タスクとして指定された場合は、順序に従って各タスクを実行する

• ファイナライザータスク

• ファイナライズドタスクが実行タスクとして指定された場合、最後にファイナライザータスクを実行する

Page 89: Spring in-summer-gradle-hands on-withanswers

依存関係の定義方法task TASK_A << { // タスク処理}

task TASK_B << { // タスク処理}

// TASK_B は TASK_A に依存しているTASK_B.dependsOn TASK_A

Page 90: Spring in-summer-gradle-hands on-withanswers

順序付けの定義方法task TASK_A << { // タスク処理}

task TASK_B << { // タスク処理}

// TASK_B は TASK_Aの後に実行されるTASK_B.mustRunAfter TASK_ATASK_B.shouldRunAfter TASK_A

Page 91: Spring in-summer-gradle-hands on-withanswers

ファイナライザーの定義方法task TASK_A << { // タスク処理}

task TASK_B << { // タスク処理}

// TASK_A のファイナライザータスクとして TASK_Bを定義TASK_A.finalizedBy TASK_B

Page 92: Spring in-summer-gradle-hands on-withanswers

#3-2 タスクの制御

1. ディレクトリの移動

2. タスクの定義

3. タスクの実行と確認

Page 93: Spring in-summer-gradle-hands on-withanswers

ディレクトリの移動• <HANDS-ON_HOME>/work3/ordering-tasksに移動します。

• ディレクトリ内にbuild.gradleファイルがあることを確認してください。

Page 94: Spring in-summer-gradle-hands on-withanswers

タスクの定義• build.gradleをエディタで開き、コメントに従って、各タスクを定義します。

‣ コメント参照

• タスクの定義方法のスライドを参考に定義してください。

Page 95: Spring in-summer-gradle-hands on-withanswers

タスクの実行と確認• 定義したタスクを実行します。

‣ gradle <タスク名>

• 「BUILD SUCCESSFUL」となることを確認してください。

• 期待通りの結果が出力されていることを確認してください。

Page 96: Spring in-summer-gradle-hands on-withanswers

#3-2: 回答例

Page 97: Spring in-summer-gradle-hands on-withanswers

/** * 3-2-1. 「TODO」「DOING」「DONE」と出力するToDoタスク、Doingタスク、Doneタスクを作成してください。 */task ToDo << { println ‘TODO' }

task Doing << { println 'DOING'}

task Done << { println ‘DONE' }

/** * 3-2-2. ToDoタスク、Doingタスク、Doneタスクに依存関係を持たせて、 *「TODO」「DOING」「DONE」の順に出力させてください。 *///Done.dependsOn Doing//Doing.dependsOn ToDo

build.gradle(1/2)

Page 98: Spring in-summer-gradle-hands on-withanswers

/** * 3-2-3. 「mustRunAfter」もしくは「shouldRunAfter」を使用して *「TODO」「DOING」「DONE」の順に出力させてください。 */Done.mustRunAfter DoingDoing.mustRunAfter ToDo

/** * 3-2-4. 「ALL TASK FINISHED」と出力するFinishedタスクを追加し、 * Doneタスクのファイナライザータスクとして定義してください。 */task Finished << { println 'ALL TASK FINISHED'}Done.finalizedBy Finished

build.gradle(2/2)

Page 99: Spring in-summer-gradle-hands on-withanswers

#4: 応用編

Page 100: Spring in-summer-gradle-hands on-withanswers

#4 アプリ起動の自動化1. ディレクトリの移動

2. ビルドスクリプトの作成

3. タスクの定義

4. タスクの実行と確認

5. アプリの動作確認

Page 101: Spring in-summer-gradle-hands on-withanswers

ディレクトリの移動• <HANDS-ON_HOME>/work4/new-webappに移動します。

• ディレクトリ内にsrcとpom.xmlファイルがあることを確認してください。

Page 102: Spring in-summer-gradle-hands on-withanswers

タスクの定義• build.gradleをエディタで開き、次のタスクを定義します。

‣ WARファイルをtomcat/webappsにコピーするタスク

‣ Tomcatを起動させるタスク

• Tomcat起動タスクが必ずWARコピータスクの後で実行されるように順序付けしてください。

Page 103: Spring in-summer-gradle-hands on-withanswers

タスクの実行と確認• 定義したタスクを実行します。

‣ gradle deployWar startTomcat

• タスク実行前にTomcatが起動していたら、shutdown.sh(bat)で停止してください。

• 「BUILD SUCCESSFUL」となることを確認してください。

• 期待通りの結果になることを確認してください。

Page 104: Spring in-summer-gradle-hands on-withanswers

アプリの動作確認• ブラウザから以下のアドレスにアクセスします。

• http://localhost:8080/helloApp/

• ブラウザに「Hello!!!!」と表示されることを確認してください。

Page 105: Spring in-summer-gradle-hands on-withanswers

#4: 回答例

Page 106: Spring in-summer-gradle-hands on-withanswers

apply plugin: 'war'

sourceCompatibility = 1.8targetCompatibility = 1.8

repositories { mavenLocal()}

dependencies { compile group: 'org.springframework', name: 'spring-webmvc', version:'4.1.7.RELEASE' providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version:'3.0.1'}

build.gradle(1/2)

Page 107: Spring in-summer-gradle-hands on-withanswers

war { baseName = 'helloApp' version = ''}

task deployWar(type: Copy) { from 'build/libs/helloApp.war' into '../../tomcat/webapps'

}task startTomcat(type: Exec) { workingDir '../../tomcat/bin' commandLine 'cmd', '/c', 'startup.bat'}deployWar.dependsOn buildstartTomcat.mustRunAfter deployWar

build.gradle(2/2)

Page 108: Spring in-summer-gradle-hands on-withanswers

Q&A

Page 109: Spring in-summer-gradle-hands on-withanswers

今日から始める 入門ハンズオン

2015.08.28 Spring in Summer R3-2 #jsug_sis #jggug