どのようにKotlinはあなたのGradleを編集することができます


こんにちは、友人!私はこの記事を書いたGradle そして、1つのJetbrains IDE(またはAndroid Studio)と完全に満足していない.
私はあなたのビットを追加する方法の味を与えたいと思いますKotlin あなたのGradle造りには、それはよりイライラさせます.
私がそれをしている間、新しいプロジェクトで依存関係管理を処理するより良い方法を紹介します.

JMFayard / 更新版


人生は、依存性とバージョンのためにGoogleにあまりに短いです


Gradleの更新版


人生は、依存性とバージョンのためにGoogleにあまりに短いです.

ドキュメントはJmfayardです。ギタブ.IOバージョン


View on GitHub
  • A confession
  • How to migrate
  • Dependencies management
  • Laziness as a great virtue of the programmer
  • Links
  • 告白


    私を知っている人々は、私がGradleについて書いて、賞賛しようとしていることに驚くかもしれません.私は、私がGradleで持っていた愛憎悪関係をしばしば表明しました.
    Gradle Performanceの話題には多くの注意が払われた
    Androidのビルドツールのうち).仕事もたくさん行われている.参照https://guides.gradle.org/performance/ and https://developer.android.com/studio/build/optimize-your-build .
    しかし、私は問題の後半にここに集中したいです.

    Maintenance of those build.gradle files can become quickly super tedious…


    Gradleの明るい面は、それが非常に宣言的で読みやすいビルドファイルで、テーブルに多くの力と柔軟性をもたらすということです.

    But with great power comes the need for great tooling… or a very frustrating user experience.


    そして、それはGradleの暗い側でした.一方build.gradle ファイルは読みやすいです、彼らは書くのが全く難しいです.あなたがそれらをカスタマイズする必要があるとき、あなたはほとんど自分のものです.通常、それはしばらく働きません、そして、あなたは理由を知りません.その後、いくつかの点では、貼り付け正しいペーストをコピーし、それが動作しますが、あなたは本当に理由を知っていない.
    何が起こったのかは、Groovyのダイナミックな性質が、Gradleで行われたすべてのメタプログラミングとひどく結合して、私たちに悪いツーリングサポートを与えることでした.
    ので、それはの背景ですGradle's kotlin-dsl project
    GradleとJetbrainsは静かに働いています.それは成熟に達することであるので、現在、話題に注意を払う良い時間です.

    移行方法


    Migrating build logic from Groovy to Kotlin つの可能な戦略
  • 構造体を保持しながら、ビルドの既存の構文を少しずつKotlinに移行する — 機械的移動と呼ぶもの
  • Gradleのベストプラクティスに向けたビルドロジックの再構築とその努力の一環としてのKotlin DSLへの切り替え
  • 我々の既存のプロジェクトのために、後者は通常より多くの感覚を作ります.
    このベビーステップを取ってC +をやっていたCプログラマが多いという話があります.
    // before.c
    int main() {
       /* I was doing C programming */
       printf("Hello, World!");
       return 0;
    }
    
    // after.cpp
    int main() {
       // Now I'm now doing c++
       printf("Hello, World!");
       return 0;
    }
    
    この精神において、私はGradle & Kotlinと一緒に取ることができる実用的な最初のステップに焦点を当てるつもりです.

    依存性管理


    Gradleは依存性を非常に簡潔に宣言することができます
    dependencies {
      implementation("com.squareup.okio:okio:2.0.0")
      implementation("io.reactivex.rxjava2:rxjava:2.2.0")
      implementation("de.mpicbg.scicomp:krangl:0.10.3")
    }
    
    このコードにはいくつか問題があります.
  • マジック文字列の編集はエラーがちです.
  • どのように、私は多モジュールプロジェクトで依存関係を集中させますか?
  • どのようなkranglですか?
  • OKIOとRXJavaの新しいバージョンが利用可能ですか?
  • Groovyでは、我々は集中化問題を修正することができますdependencies.gradle pattern .
    Kotlinと同じことをすることはとても簡単です.
    // buildSrc/build.gradle.kts
    plugins {
        `kotlin-dsl`
    }
    
    // buildSrc/src/main/kotlin/Libs.kt
    object Libs {
        val okio = "com.squareup.okio:okio:2.0.0"
    }
    
    // some-module/build.gradle       or
    // some-module/build.gradle.kts
    dependencies {
       implementation(Libs.okio)
    }
    
    からのコードbuildSrc folder が自動的にすべてのあなたのbuild.gradle or build.gradle.kts ファイル.

    プログラマの偉大な美徳としての怠惰


    私はいくつかのプロジェクトのためにそれをしました、そして、私は最初に幸福でした.私の3番目のプロジェクトでは、すべての文字列を抽出することは退屈であることが明らかになった.
    また、問題は解決しなかった.What is Krangl? と4 )What new versions are available?ベンマネスから非常に良いプラグインがあります. gradle-versions-plugin , それはかつてあなたのGradleプロジェクトの答えに適用されます.怠惰なプログラマとして、私は疑問に思いました:私はそれが必要なKotlinコードを正確に生成するために拡張することができますか?
    それが可能であるように、私の新しいGradleプラグインを提示させてください!

    プラグインを含める


    あなたのトップでbuild.gradle ファイルを追加します

    plugins {
      id("de.fayard.buildSrcVersions") version "$VERSION"
    }
    
    見つけるでしょう$VERSION アットhttps://plugins.gradle.org/plugin/de.fayard.buildSrcVersions .
    この新しい宣言プラグインブロックは、buildscript {...} より悪いkotlin DSLユーザ経験を提供する構文.

    //Gradlewビルドバージョン


    これは、最初に実行するコマンドであり、新しい依存関係を追加するたびに、またはどのバージョンが使用可能かを確認したい.
    最初にタスクを実行する:dependencyUpdates それはインターネットに接続し、しばらくかかるかもしれません.このタスクはJSON report すべての依存関係に関するメタデータを使用します.Kotlinpoet 次のコードに変換するのに役立ちます.
    // Folder buildSrc/src/main/kotlin
    
    object Libs {
    
        /** [krangl website](https://github.com/holgerbrandl/krangl) */
        const val krangl: String = "de.mpicbg.scicomp:krangl:" + Versions.krangl
    
        /** [okio website](https://github.com/square/okio/) */
        const val okio: String = "com.squareup.okio:okio:" + Versions.okio
    
        /** [rxjava website](https://github.com/ReactiveX/RxJava) */
        const val rxjava: String = "io.reactivex.rxjava2:rxjava:" + Versions.rxjava
    }
    object Versions {
    
        const val krangl: String = "0.10.3" // up-to-date
        const val okio: String = "2.0.0" // available: milestone=2.1.0
        const val rxjava: String = "2.2.0" // available: milestone=2.2.2
    
    }
    

    IDE統合


    この生成されたコードはGradle ' sによって提供されるより良いIDE統合を経験する必要があるすべてですkotlin-dsl インIntelliJ IDEA or Android Studio ≥ 3.2 .
    https://www.useloom.com/share/7edceb83fd594f319356240fcce304d5
    我々は今解決しようとする問題を解決した
  • これ以上のマジック文字列Libs.<TAB> そして、自動補完は残りを行います.
  • 我々は、すべての中でそれらを使用することができますbuild.gradle and build.gradle.kts ファイル.
  • 発見するKrangl 我々は、クイックドキュメントを押すと、ウェブサイトへのリンクをクリックします.
  • どの新しいバージョンが利用可能かを知るには、IDEからLibs.okio そこからVersions.okio . 2.0.0は現在使用され、有用なコメントは2.1.0が利用可能であることを私たちに伝えます.(プラグインは自動的に依存関係の更新を適用しません.
  • 試してみる


    グルービーbuild.gradle と小林build.gradle.kts ファイルは、ほぼ一度書かれたように見えます.何が違うのかは、その経験を書くことですので、IntellijのアイデアやAndroidスタジオを起動することをお勧めします.
    私はGradleの黒魔術面を嫌っていることを告白し始めました.Kotlinでブラックボックスを開くことは、非常に役に立ちました.私はGradleは単に、有用な、よく文書化されたAPIであることに気づいた.APIは、他のJava APIのようなあなたの開発ツールやスキルを使用して動作することができます.善良さが我々から隠されていたAPI.十分な関心があれば、以下の記事にもっと深く行くつもりです.

    リンク


    マイプラグイン

    JMFayard / 更新版


    人生は、依存性とバージョンのためにGoogleにあまりに短いです


    Gradleの更新版


    人生は、依存性とバージョンのためにGoogleにあまりに短いです.

    ドキュメントはJmfayardです。ギタブ.IOバージョン


    View on GitHub
    Gradle/kotlin DSLサンプル

    グラグラ / DSLサンプル


    サンプルはGradle Kotlin DSLを使ってビルドします


    DSLサンプル



    ようこそ!Gradle - Kotlin DSLは書き込みをサポートしますGradle を使用してビルドスクリプトKotlin ランゲージ.これは、最適なIDEとツールの経験を組み合わせてビルドロジックを開発するための豊富な、柔軟かつ静的型付けアプローチでGradleユーザーを提供することを目指しています.

    始める


    最速の方法を取得し、コールトベースのGradleビルドで実行するにはgradle init
    gradle init --dsl kotlin
    
    または、Gradleが既にインストールされていない場合、Gradleをオンラインで作成することができますhttps://gradle-initializr.cleverapps.io/ .
    Gradle - Kotlin DSLは、dedicated chapter Gradleユーザーマニュアルで.
    また、等級user manual and guides groovy dslとkotlin dslの両方を示すスクリプトスクリプトの抜粋を含みます.これは、Gradle - Kotlin DSLでこれを行う方法を見つけるのに最適な場所ですそして、それはすべてからGradle機能をカバーします.
    View on GitHub