2012年11月30日金曜日

Gradleのカスタムプラグイン内でタスクの依存関係を定義する

Gradleのカスタムプラグイン内でタスクの依存関係を定義する方法は、以下の通り。


TaskのdependsOnメソッドを使って依存関係を定義している。なお、Projectのtaskメソッドは、定義したタスク自身を返す。

上記のビルドスクリプトを実行した結果は、以下の通り。
$ gradle -q second
first
second

2012年11月29日木曜日

Gradleからgitコマンドを使ってgit init

Gradleを使ってコマンドライン経由でgit initを実行する例は、以下の通り。

gitがインストールされている必要はあるが、コマンドライン経由の実行なので、基本的に何でも?できるはず。

関連リンク

2012年11月28日水曜日

GradleからJGitを使ってgit init

JGitのantタスクを使用して、Gradleからgit initを実行する例は、以下の通り。
 

JGitのantタスクからよびだせるgitのサブコマンドは、add, clone, checkout, initだけのようなので、複雑なことをするのであれば、Execタスクを使ってコマンドラインのgitを呼び出したほうがよさそう。

関連リンク

2012年11月27日火曜日

GradleのCopyタスクを使用する際の注意点

GradleのCopyタスクで、コピー先にプロジェクト直下のディレクトリを指定した場合、IOExceptionが発生する点に注意。


回避策としては、antプロパティのcoypタスクを使用する。

関連リンク

2012年11月26日月曜日

Gradleからコマンドラインのコマンドを実行する

Gradleからコマンドラインのコマンドを実行する方法は、以下の通り。


タスクのtypeにはExecを指定する。commandLineプロパティには実行するコマンドと引数をリストととして指定する([]は省略されている)。Windowsの場合、cmd /cから呼び出す必要がある点に注意。

 

関連リンク

2012年11月22日木曜日

Gradle 1.3 リリース

Gradle 1.3がリリースされています。リリースノートは、下記リンクを参照。


まだリリースノートをじっくり読んではいませんが、個人的には、Eclipseとの統合 (IDE Integration) が強化されている点が気になります。具体的には、Eclipse側でScalaやGroovyのライブラリクラスパスコンテナにより依存関係が設定されている場合、GradleのEclipseプラグインではこれらの依存関係を自動的に除外するようになったとのことです。


2012年11月21日水曜日

Building and Testing with Gradleの全文がWeb

Building and Testing with Gradleの全文がWebで公開されているようです。


まだ読んでいない方は、1章の冒頭を読んでみることをお勧めします。詳細は、下記を参照ください。

2012年11月20日火曜日

Gradleのカスタムプラグインに定義したタスクにグループと説明をつける

Gradleのカスタムプラグインに定義したタスクにグループと説明をつける方法は、以下の通り。


4-5行目でグループ、説明を設定している。また、6-9行目のように、クロージャを使って設定することもできる。

なお、build.gradleに普通に定義した(カスタムタスクやカスタムプラグインではない)タスクにグループと説明をつける方法については、下記を参照。

2012年11月19日月曜日

Building and Testing with Gradle - Chapter 1

以下、 Building and Testing With Gradleの1章についての読書メモ。

いわゆるGetting Started的な内容で、Gradleを触ったことのある人なら基本的に読み飛ばしても問題ないが、p1-p3の導入部が興味深い。Gradleを触ったことのない人は、この部分を読んで共感できる部分があるなら、触ってみることをお勧めする。

導入部の概要は、以下の通り。

ビルドツールとしてのGradleの位置づけについて


ビルドツールとしてのGradleの位置づけについて、AntやMavenとの比較をもとに説明。柔軟性はあるが規約のないAnt、規約はあるが規約からはずれたことをするのが面倒なMavenに対し、Gradleが「思慮深い中間地点 (sensible middle ground)」として存在しているとの主張。

Gradleのファイルフォーマット


ビルドファイルのフォーマットについて。XMLがビルドファイルのフォーマットとしていかに向いていないかの説明した上で、以下のように断じているのが小気味いい。
Ultimately, XML is the wrong format for a build file.
Antでプログラムフローの制御ができない(できるとしても、あまりに面倒)のに嫌気がさし、AntからGroovyスクリプトを呼び出したりしているうちに辿り着いたのがGradleだったりするので、個人的には多いに共感できる。

それに対して、Gradleのビルドファイルが、基本的にGroovyスクリプトであることの利点について説明。

DSL


GradleのビルドファイルがGroovyスクリプトであるからといって、生のGroovyでガリガリと書くことは推奨されていない。Gradleはビルドファイルを記述するDSLを提供しているので、基本的にはそれを使い、DSLでカバーされていない部分をプラグインとして拡張するのが望ましいとのこと。趣旨は納得できるが、そこまでいいいながらカスタムプラグインの作成方法について、この本に記述がないのは残念。

関連リンク



Gradleのタスクにグループと説明をつける

Gradleのタスクにはグループと説明をつけることができる。具体的なbuild.gradleの例は、以下の通り。


gradle tasksを実行した結果は、以下の通り。
> gradle -q tasks

------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------

Greeting tasks
--------------
hello - Say hello.
hi - Say hi.

(以下省略)

helloタスクとhiタスクがgreetingというグループにまとめて表示されている。また、各タスクの説明も表示されている。

2012年11月16日金曜日

Gradle Effective Implementation Guide ファーストインプレッション

今までGradle関連の本といえば、Building and Testing With Gradleの一択だったのですが、最近Gradle Effective Implementation Guideという本が発売されました。いくつかの章を拾い読みしてみましたが、なかなかの良書だと思います。

著者は、『mrhaki.com - Groovy, Grails and Java Developer』の人。Groovy, Gradle界隈では有名人(だと思う)で、Web検索すると、このサイトがよくヒットします(この本の発売についてのポストもありました)。

内容については、スコープが妥当で、章立てもよく練られています。Chapter 5: Dependency Managementでは、依存関係について一章を割いて説明しており、なかなかツボを心得ています。また、Chapter 10: Writing Custom Tasks and Pluginsで、カスタムプラグインの作成方法をかなり丁寧に説明しているのもポイントが高いです。章の依存関係(Gradleにおける依存関係のことではないですよ)も基本的になさそうなので、必要なトピックだけを拾い読みすることもできそうです。

実際に操作しながら読み進められるスタイルで書かれており、流れがあって読みやすい文章です。また、必要に応じてGradleの内部的な動作についても記述されているので、単に操作方法を知るだけでなく、Gradle自体への理解も深めることができます。

英語も平易で読みやすいので、Gradleを始める最初の一冊としてお勧めできそうです。

2012年11月14日水曜日

GradleのProjectプロパティをプロジェクト外部に定義したスクリプトから設定する

Gradleで、プロジェクト外部に定義したスクリプトを使用して、Projectプロパティを設定する方法は、次の通り。

まず、ユーザディレクトリの.gradleディレクトリに以下のファイルを作成する(名前は、other.gradleとする)。
ext.prop1 = 'value1'
次に、任意のプロジェクトのbuild.gradleで、apply fromを使って上記のother.gradleを読み込む。


上記のbuild.gradleで定義したタスクを実行した結果は、以下の通り。
> gradle -q testProperties
value1

関連リンク

Gradleで外部依存関係に指定したjarファイルをプロジェクト内のディレクトリにコピーする

Gradleで外部依存関係に指定したjarファイルをプロジェクト内のディレクトリにコピーするbuild.gradleは、以下の通り。


上記のcopyLibタスクを実行すると、commons-langのjarがプロジェクト内のlibディレクトリにコピーされる。

2012年11月13日火曜日

Windows上のEclipseでパッケージ・エクスプローラーからGit Bashを開く

dev-xconnecting: OSX上のEclipseでパッケージ・エクスプローラーからターミナルを開く』で紹介したPath Tools Eclipse Plug-inを、Windowsでも使ってみました。

デフォルトの設定で、コマンドプロンプトが開くことは確認できたのですが、ふと思い立ち、下記リンクを参考にGit Bashで開くよう設定してみました。


まずは、下記のバッチファイルを作成(ここでは、cygwin.batとする)し、pathを通しておきます。

@echo off
cd /D "%1"
cmd /c ""C:\Program Files\Git\bin\sh.exe" --login -i"

Eclipseの「Preferences」-「Path Tools」-「Shell at Folder:」に、下記を設定します。

cmd /K start cygwin "{path}"

パッケージ・エクスプローラーで任意のフォルダを選択し、右クリック後に「Path Tools」-「Command Line Shell」を選択すると、Git Bashが開きます。

ただし、上記バッチファイルの通り、コマンドプロンプトを開いた後にGit Bashをcmdで呼び出しているので、exitを2回実行しないとコンソールのウインドウが閉じないのが難点です。

Eclipseでgit stash

Eclipse上のgit (EGit) でstashする方法は、下記リンクの通り。


なお、git stashを使うと、現在のワーキングツリーの状態を一時的に保存することができる。例えばマージでコンフリクトが発生した場合、ローカルの変更を一旦stashすればマージ可能となり、マージ後にstashを適用すればマージ前のワーキングツリー戻ることができる。

 

関連リンク

2012年11月12日月曜日

OSX上のEclipseでパッケージ・エクスプローラーからターミナルを開く

Eclipseで作業中に、プロジェクトのディレクトリでターミナル(コマンドプロンプト)やFinder(エクスプローラー)を開きたいことがよくあるので、パッケージ・エクスプローラーから右クリックでターミナルを開けるEclipseプラグインを物色してみました。Path Tools Eclipse Plug-inが良さそうです。


OSX上のGGTS 3.1.0 (JUNOベース) にインストールしてみましたが、問題なく動作します。Windowsでも動作するようなので、別途試してみようと思います。

2012年11月10日土曜日

Gradleでビルドスクリプトを実行しているOSを判定する

Gradleでビルドスクリプトを実行しているOSを判定する方法は、以下の通り。


OSの判定には、Antのconditionタスクを使用している。

関連リンク

2012年11月9日金曜日

Gradleでbuildscriptに定義した外部依存関係を表示する

Gradleでbuildscriptに定義した外部依存関係(classpath)を表示するbuild.gradleは、以下の通り。


上記のタスクを実行すると、commons-emailだけでなく、commons-emailが依存しているjarも表示される。

関連リンク

Gradleのtask内でprojectプロパティをチェックする際の注意点

Gradleのtask内でprojectプロパティをチェックする際は、ProjectクラスのhasPropertyメソッドを明示的に呼ぶ必要がある。単にhasPropertyメソッドを呼び出した場合は、ProjectクラスではなくTaskクラスのhasPropertyメソッドが呼ばれるので注意。

動作確認用のbuild.propertiesは、以下の通り。


上記タスクの実行結果は、以下の通り。
>gradle -q -Ptest
null
true
>gradle -q
null
false

Gradleのカスタムプラグインを作成する

Gradleのカスタムプラグインを作成する手順は、以下の通り。

ここでは、『dev-xconnecting: build.gradleにプラグインを定義する』でbuild.gradle内に定義したプラグインを、Gradleのカスタムプラグインとしてビルドしてみる。

まず、Groovy用のGradleプロジェクトを作成する(手順は『dev-xconnecting: Eclipse + Gradle STS SupportでGroovy用のGradleプロジェクトを作成』を参照)。

次に、以下のファイルを作成する。

src
 └─main
    ├─groovy
    │      Greeting.groovy
    │      GreetingTask.groovy
    │
    └─resources
        └─META-INF
            └─gradle-plugins
                    greeting.properties
 
Greeting.groovyは以下の通り。


GreetingTask.groovyは以下の通り。


package文やimport文が追加されている以外は、『dev-xconnecting: build.gradleにプラグインを定義する』で作成したクラスと違いはない。

greeting.propertiesにはプラグインの完全修飾クラス名を指定する。

implementation-class=com.example.Greeting

このプロパティファイルの名前(greeting)がプラグイン名となる(apply pluginする際に、この名前を使用する)。

プラグインをビルドしてMavenのローカルリポジトリにデプロイするためのbuild.gradleは、以下の通り。


9-12行目でプラグインのビルド時に必要となる外部依存関係を定義している。gradle buildすると、build/libs内にプラグインのjarファイルが作成される。さらに、gradle uploadArchivesで、このjarファイルがMavenのローカルリポジトリにデプロイされる。

作成したプラグインを使用するためのbuild.gradleは、以下の通り。なお、buildscriptプロパティには、ビルドスクリプト自身の外部依存関係(ex. カスタムプラグインのjarファイル)を記述する。


上記build.gradleからタスクを呼び出した結果は、以下の通り。

>gradle -q greet
Hello
>gradle -q hi
Hi

関連リンク

2012年11月8日木曜日

MavenのSNAPSHOTバージョン

MavenにおけるSNAPSHOTバージョンの意味については、下記を参照。

インクリメンタルサーチを改善するEclipseプラグイン「Glance」

Eclipseはエディタの検索機能が貧弱なので、下記リンクを参考にGlanceというプラグインをインストールしてみました。


エディタだけでなくビューなどでもインクリメンタルサーチが効くのが新鮮です。パッケージ・エクスプローラー・ビューをプロジェクト名で検索すると、ちゃんとそのプロジェクトにジャンプしてくれます。なかなか便利なので、使ってみようと思います。

build.gradleにプラグインを定義する

build.gradle内にGradleのカスタムプラグインを定義する例は以下の通り。(なお、これは例のための例であり、実用性はない点に注意。実際にカスタムプラグインを作成する際の例は『dev-xconnecting: Gradleのカスタムプラグインを作成する』を参照。)


Greetingクラスがプラグインを定義するためのクラス。greetとというタスク名でGreetingTaskを呼び出せるよう設定している(3行目)。

15行目で、作成したプラグインを適用している。文字列ではなく型名でプラグインを指定している点に注意。
上記のタスクを呼び出した結果は、以下の通り。
>gradle -q greet
Hello
>gradle -q hi
Hi

2012年11月7日水曜日

build.gradleにカスタムタスクを定義する

Gradleではbuild.gradle内にカスタムタスクを定義することができる。具体例は、下記の通り。


 カスタムタスクはorg.gradle.api.DefaultTaskを継承したクラスとして定義する。タスク実行時に呼び出される処理は引数なしのメソッド(上記ではgreet()メソッド)として定義し、@TaskActionアノテーションを付与する。カスタムタスクにプロパティ(上記ではgreetigプロパティ)を定義することにより、外部からの情報を受け取ることができる。
上記のタスクを呼び出した結果は、以下の通り。
>gradle -q hello
Hello
>gradle -q hi
Hi

関連リンク

2012年11月6日火曜日

GitHubをMavenリポジトリとして利用する

GitHubをMavenリポジトリとして利用する手順は、下記リンクに詳しい。


手順としては上記リンクに従えば問題ないが、初めは何をやっているのかピンとこなかったので、以下、個人的な要約。

  • Mavenのローカルリポジトリを作成
    • このリポジトリに任意のartifactをuploadする
  • このMavenリポジトリをGitリポジトリとして管理
  • このGitリポジトリをGitHub上の任意のリポジトリにpush
    • gh-pagesブランチにpushするのがポイント
      • Mavenリポジトリとして、いい感じのURLにするため

Twitter for iPadの最新版を使用して感じたこと

Twitter for iPadを最新版にアップデートしました。以前のバージョンではアカウント名がでかでかと表示されるのが気に入らなかったのですが、最新版ではホーム画面にはアカウント名が表示されなくなりました。

ただ、複数アカウントを使用している場合に、アカウントを簡単に切り替える方法がなくなってしまった(ように見えた)ので戸惑ってしまいました。実際には、下記リンクに記述があるように、アカウントのアイコンを長押しすればよいようです。


PCのアプリであれば、メニューバーなどからショートカットを自然に覚えられることが多いのですが、スマートフォンの場合、ショートカット的な手順が用意されていても、それに気づく手段が用意されていません。せっかくの機能もWeb検索しないと見つけられないのが、タッチデバイスの課題のように感じます。

2012年11月5日月曜日

Mac OSXにGradleをインストール

 Homebrewを使用してMac OSXにGradleをインストールする手順は、以下が参考になる。


上記リンクは、実際にはHomebrewを使用してGroovyをインストールする手順だが、Gradleも同様にインストール可能。またHomebrewの導入手順についても、上記リンクからリンクをたどれば、詳細な説明がある。

2012年11月2日金曜日

GradleからMavenリポジトリへのデプロイ

GradleでビルドしたjarファイルをMavenリポジトリにデプロイするには、uploadArchivesタスクを使用する。ローカルのMavenリポジトリにデプロイする例は、以下の通り。

uploadArchivesを使用するには、archivesBaseName, group, versionを指定しておく。archivesBaseNameが明示的に指定されていない場合は、プロジェクト名(build.gradleが含まれるフォルダ名)が使用される。

関連リンク

2012年11月1日木曜日

Gradleで環境ごとに異なる設定を使用する

Gradleでタスクを実行する際に、環境ごと異なる設定を使用したい場合がある。その際、個人的には以下の要件を満たしたい。

  • 使用する環境はコマンドラインから指定したい
  • 各環境に共通の設定は、ひとつのファイルで管理したい
  • 環境によって異なる設定は、環境ごとに別ファイルで管理したい
  • パスワードなどバージョン管理対象外としたい設定は、プロジェクト外のファイルで管理したい

これら要件を満たしたbuild.gradleの記述は、『 Gradle で環境ごとに構成を変更する その2 - bluepapa32’s Java Blog』に詳しい。これを参考に、ディレクトリ構成やファイル名などを自分の好みに変更したbuild.gradleは以下の通り。

基本的には上記リンクのままだが、-Pオプションに存在しない環境を指定した場合、例外を投げてタスクを終了する処理を追加してある。また、“Dynamic properties are deprecated”という警告を消すため、extプロパティを使用している。

 

関連リンク