mike-neckのブログ

Java or Groovy or Swift or Golang

今更だけど、Gradleをちゃんと追いかけよう - gradle2.7-rc1がリリースされました

f:id:mike_neck:20150818084108g:plain

Gradle2.7-rc1が2015/08/29の0:00頃にリリースされたようです。Gradleは2ヶ月に1回リリースするので、正式版は10月になると思います。今は人柱になりたい方が試してみるとよいと思います。

discuss.gradle.org

内容については、きっとよしださんがどっかの勉強会で詳しく解説してくれると思うので、ここでは雑に紹介します(人任せ)。

ソースはここ

Gradle 2.7-rc-1 Release Notes

なお、このURLは新しいバージョンが出るたびに新しいrc版のリリースノートになるので、2.8-rc1が出る頃は2.8のものになってるので注意してください。


結構重要:Gradle2.6のラッパー遅くなってごめんね

Gradle2.6でラッパー作った人は、すみやかに2.7でラッパーを作りなおしたほうがいいよ。2.6でチェックサムの検証方法を変えたんだけど、そのせいでラッパーを使った時のスタートアップタイムがくっそ遅くなっちゃいました。2.7で修正されるから、マジで2.7でラッパー作りなおしてね。

http認証の方法を選べるようになったよ

Gradleはmaven/ivyレポジトリーにhttp/httpsで接続するときに、いろんな認証方法(NTLM/Kerberos/ダイジェスト/ベーシック)で接続するようにしてたんだけど、意図しない方法で認証するのを避けるために、認証方法を指定できるようにしたよ。

repositories {
  // ダイジェスト認証
  maven {
    url 'https://my.company.com/m2'
    credentials {
      username 'ore-ore'
      password 'ore-dayo'
    }
    authentication {
      digest(DigestAuthentication)
    }
  }
  // ベーシック認証
  maven {
    url 'https://another.company.com/m2'
    credentials {
      username 'proper-shain'
      password 'proper-shain-pass'
    }
    authentication {
      basic(BasicAuthentication)
    }
  }
}

今のところ、この方法はダイジェストとベーシック認証しかサポートしてないけどね :-p

Gradleはレスポンスコード401が返された時にだけクレデンシャルを送ってるんだけど、GitHubとかは404返してきたりするので、依存性解決に失敗したりするんだよね。で、これの対処としてpreemptive authenticationで送るんだけど、サーバー側でもベーシック認証でいけるように設定しておいてほしいです。

Gradle TestKitが独立した環境で実行されるようになったよ

Gradle TestKitが今のビルドの環境を引き継がないように、独立した環境で実行できるように改善したし、起動したデーモンはテスト終了時に死ぬようになったよ。

(意訳者註) Gradle TestKitのデーモンがビルドの環境引き継いだり、テスト後に死んでくれなかったため、コード修正しても直ってないことがよくあったので、これは嬉しい

Playプラグインでも--continuousで失敗の表示をするようにしたよ

ビルド失敗した時にちゃんとリソースとかリロードするようにしたし、失敗したよってブラウザーでも表示されるようにしたよ

Play2.4サポート

Play2.4サポートしたし、injected routes generatorにも対応したよ。デフォルトはstatic routes generatorだけど、model{} -> component{} -> play{}からinjected routes generatorに切り替えられるよ。

Managed Modelの修正

  • プリミティブ型のサポート
  • booleanについてはisFooのようなゲッターにも対応

(意訳者註)あ、僕のプラグインの実装が面倒になるな…(´・ω・`)

JVMコンポーネントの依存性管理

jvm-componentプラグインを使って、マルチプロジェクト内で複数プラットフォーム対応のクロスコンパイルができるようになるよ。

plugins {
    id 'jvm-component'
    id 'java-lang'
}

model {
    components {
        main(JvmLibrarySpec) {
            targetPlatform 'java7'
            targetPlatform 'java8'
            sources {
                java {
                    dependencies {
                        library 'commons'
                    }
                }
            }
        }
        commons(JvmLibrarySpec) {
            targetPlatform 'java7'
        }
    }
}

例えば、このビルドスクリプトだと、commonsというJava7のサブプロジェクトに依存する、Java8とJava7の2つのJarファイルが作成される。新しいJavaプラグインに詳しく書いてあるんで、読んどいて。


バグフィックス

破壊的変更

  • ANTLRのパッケージ構造と出力ソースについて
    • ANTLRで出力されるソースのディレクトリーがグラマーファイルのパッケージ情報から算出されるようになる(これはGradle2.2で混入したリグレッションの修正)
    • ANTLR3/ANTLR4から出力されるソースのディレクトリーがANTLRのグラマーフォルダーからの相対パスになる
  • Eclipseでソースディレクトリーとリソースディレクトリーがオーバーラップしている時の対応

以下略