@int128

int128.hatenablog.com

groovy

Gradle SSH Plugin 1.0.5をリリースした

Gradle SSH Plugin 1.0.4と1.0.5をリリースしました。 New Feature in v1.0.4 コマンドやシェルの終了ステータスを無視する設定を追加しました。下記のように引数に ignoreError: true を加えると、コマンドやシェルが0以外のステータスコードを返しても例外…

Gradle SSH Plugin 1.0.3をリリースした

Gradle SSH Plugin 1.0.3をリリースしました.ビルドツール Gradle からSSHを使ってデプロイなどを行うためのプラグインです. New Features Gradleの標準APIに合わせて,ファイル転送のメソッドシグネチャを見直しました.具体的には,get() と put() の記…

Gradle SSH Plugin 1.0.2をリリースした

Gradle SSH Plugin 1.0.2をリリースしました. SSH Pluginを使うと,下記のようにGradleからSSHでコマンドを実行したりファイルを送受信したりできます. // build.gradle plugins { id 'org.hidetake.ssh' version '1.0.2' } remotes { webServer { host = …

trait内のクロージャからプライベートメソッドが見えない

Groovy 2.3から導入されたtraitを使っていて、妙な事象に遭遇したのでまとめてみます。具体的には、traitの中でクロージャを使う場合に、クロージャからプライベートメソッドが見えない仕様があるようです。 例えば、下記のような trait T があるとします。 …

Groovyのcall()をプロパティに対して適用するには?

TLDR Groovyの call() はローカル変数に対しては機能するが、クラスのプロパティに対しては機能しない。解決法をご存じでしたら教えてください。 やりたいこと 変数に関数呼び出し演算子を適用した場合の処理を書きたいことがあります。例えば、下記のように…

Use trait with generics in Groovy

Groovyでジェネリクス付きのtraitを使う場合にちょっとハマったのでメモを残します。 前提 Groovy 2.3.6 JDK 7u72 例 下記のコードを実行してみます。 @groovy.transform.Immutable class Person { final String name final int age } trait NamedMap<T> { bool</t>…

Jenkins Workflow Pluginを使ってみる

先日リリースされたJenkins Workflow Plugin 1.0を使ってみました。年明けのJenkinsユーザカンファレンスで詳しい発表があると思うので、今から楽しみですね! Workflow Pluginでできること Workflow Pluginを使うと、Jenkinsジョブの動作をGroovyで記述する…

今日から始めるGradleプラグイン開発 #gadvent

G*Advent Calendar(Groovy,Grails,Gradle,Spock...) Advent Calendar 2014 - Qiitaの17日目です。 本記事では、9日目の記事で紹介したGradleプラグインのテンプレートプロジェクトを使って、新しいGradleプラグインを作る方法を説明します。14日目の記事で紹…

Gradle Slashプラグインをリリースしました #gadvent

G*Advent Calendar(Groovy,Grails,Gradle,Spock...) Advent Calendar 2014 - Qiitaの14日目です。 Gradle Slashというプラグインをリリースしました。このプラグインを使うと、Fileオブジェクトと文字列をスラッシュ(除算演算子)で連結して書けるようにな…

Gradleプラグインのテンプレートプロジェクトを公開します #gadvent

G*Advent Calendar(Groovy,Grails,Gradle,Spock...) Advent Calendar 2014 - Qiitaの9日目です。 GradleはビルドスクリプトをGroovy DSLで書くため、現実のプロジェクトで複雑な問題が発生した場合に柔軟に対処できる特徴を持っています。現実のプロジェクト…

バイトコード検証の不具合がJDK 7u72/8u25で修正された

JDK 7u65/8u11以降にはバイトコード検証の不具合 JDK-8051012 があり、Groovyなどの処理系に影響があるという記事を書きましたが、最近リリースされたJDK 7u72/8u25で修正されたようです。 JDK-8051012 への対応状況を以下にまとめました。○は動く、×は動か…

JDK 7u65/8u11以降に存在するバイトコード検証の不具合

JDK 7u65/8u11以降にはバイトコード検証の不具合 JDK-8051012 があります。Groovyでは、 GROOVY-6951 で報告されているように、コンストラクタ内でsuper()やthis()を使うと実行時エラーが発生します。 Gradle SSH Pluginでもコンストラクタ内でsuper()を実行…

@DelegateでJavaバージョンの差異が顕在化するケース

JDK 8でビルドしたクラスファイルをJDK 7で実行するとClassNotFoundExceptionが発生する事象でハマったのでメモ。結論からいうと、ソースコードでJava 8に固有のクラスを直接参照していなくても、@Delegateによって間接的に参照されるケースがあります。 前…

Gradle SSH Plugin 0.3.3 released

GradleからSSHを使うためのプラグインの新バージョンをリリースしました。 今回のリリースからグローバル設定 (global settings) で指定できる設定項目が大幅に増えました。 例えば、コマンド実行時にPTY allocationを指定するフラグはこれまでメソッドごと…

meta classにmix inした場合の影響範囲

想定通りでした。インスタンスのmeta classにクラスをmix inした場合は、そのインスタンスのみに影響します。 class X { def x() { 100 } } class Y { def y() { 200 } } def x1 = new X() x1.metaClass.mixin Y println x1.x() // -> 100 println x1.y() //…

Categoryを使ってファイルパスを直感的に書く

GroovyのCategoryを使って、ファイルパスを直感的に書く仕組みを導入してみます。 Fileのコンストラクタには親ディレクトリとファイル名を渡すことができますが、ディレクトリの階層が深くなると読みづらくなります。 例えば、baseDirの下のinnerDirの下のfi…

SSH接続のコードをApache MINA sshdでテストする

Apache MINA sshd(以下sshd)を使うとJavaVMだけでSSHサーバを実行できます。あらかじめ定義されているインタフェースを実装するだけで、認証やコマンド実行を受け付けることができます。 本稿では、SSH接続のコードをテストする場合にサーバサイドにsshdを…

Gradle SSH Plugin 0.1.9をリリースしました

ビルドツールのGradleでSSHを使うためのプラグインを作っています。ちょっと前にバージョン0.1.9をリリースしたので、宣伝のエントリを残しておきます。https://github.com/int128/gradle-ssh-pluginこのプラグインの主な用途はやはりデプロイでしょう。アプ…

Groovyのmeta classによるメソッド置き換えとテスト

テスト対象コードにスリープが含まれていると、テストに時間が掛かってしまいます。いわゆるスローテストの問題です。そのため、スリープを無害なモックに置き換えることでテストの時間を短くする工夫がよく行われます。Groovyでは meta class でスリープメ…

SpockでClosureのコールバックをテストする

Spockでテストを書いている時に Closure のコールバックをどうやってテストするか調べたのでメモ。例えば Hoge#process(Closure) というメソッドがあるとします。何かを処理したら結果が Closure に渡される仕様とします。 class Hoge { /** * ほげを処理し…

GradleでMaven Central Repositoryに成果物をリリースする

Gradleでビルドした成果物をMaven Central Repositoryにリリースする方法を説明します。成果物の公開にあたってはSonatype OSSRHで申請が必要です。こちらのイケメンな記事が大変参考になります。こちらの記事ではMavenを使っていますが、本稿ではGradleを使…

SharePointのREST APIを使ってリストに項目を追加する

開発チームの情報共有にSharePointを使っているケースでは、何かのバッチで項目を追加したいことがあります。例えば、自動テストの結果を記録したり、インスペクションに引っかかったモジュールを記録したりといった使い道が考えられます。SharePointのリス…

Webアプリのデプロイ後に初期化を待つスクリプト

Gradleスクリプトの小ネタです。Webアプリのインテグレーションテストやスモークテストを行う場合、デプロイ後にアプリが完全に初期化されるまで待機してからテストを行いたい場合があります。そんな時は、アプリがHTTP 200を返すまでリトライする処理を直前…

Gradle SSH Plugin 0.1.3をリリースしました

GradleでSSH経由でコマンド実行やファイル転送を行うためのプラグイン gradle-ssh-plugin のバージョン 0.1.3 をリリースしました。 https://github.com/int128/gradle-ssh-plugin 今回のバージョンからは Maven Central Repository から取得できるようにな…

gradle-ssh-plugin-0.1.0を公開します

GradleでSSHを使う際に便利なプラグインを作ったので公開します。複数のサーバでコマンドを実行したりファイルを転送したりするのを簡潔に記述できます。 https://github.com/int128/gradle-ssh-plugin 現在のバージョンは最小限の機能しか実装していません…

Gradle タスクの直列実行を Collection.inject() で書いてみる

非同期処理の直列実行を Array.reduce() で書いてみる - GeekFactory と同じことを Gradle (Groovy) でやってみます。Gradle で複数のタスクの依存関係を定義するケースを考えます。Task.dependsOn を使って複数のタスクを指定した場合、タスクの順序は保証…