JavaRush /Java Blog /Random-JA /Gradle の簡単な紹介
Viacheslav
レベル 3

Gradle の簡単な紹介

Random-JA グループに公開済み

導入

このレビューのトピックは、Gradle 自動ビルド システムです。英語では、ビルド システムはBuild Toolsと呼ばれます。 Gradle の簡単な紹介 - 1なぜこれが必要なのでしょうか? Java でプロジェクトを手動で構築するのは、かなり労働集約的なプロセスです。プロジェクトが必要とするライブラリとフレームワーク、およびプロジェクトが依存するライブラリとフレームワークを正確に示す必要があります。ここで、Habré に関する優れた記事「コマンドラインでの Java の操作」を読むことができます。遅かれ早かれ、このプロセスを自動化するためのスクリプトの作成を開始することになります。ここで、世界中のすべての開発者がこれを行い、誰かが自分のプロジェクト用にすでに書いたものを全員が再度書くと想像してください。そして、このプロセスを自動化するプロジェクト組立システムが登場しました。さらに、一方では、希望どおりにプロジェクトを組み立てることができ、他方では、多かれ少なかれ標準化されたツールが提供されます。Gradle の代替となるのは、Maven 自動ビルド システムです。これら 2 つのアセンブリ システムは、一方では異なりますが、他方では、多くの類似点があります。Gradle の Web サイトには、このトピックに関する資料があります:「Maven から Gradle への移行」。このチュートリアルで述べたように、Gradle と Maven ではプロジェクトの構築方法について異なる視点があります。Gradle は、相互に依存する可能性のあるタスクのグラフに基づいています。タスクは何らかの作業を行います。Maven は、特定の「目標」が関連付けられた特定のフェーズのモデルを使用します。これらの目標は、何らかの作業が行われる場所です。ただし、これらの異なるアプローチでは、どちらのビルド システムも同じ規則に従っており、依存関係の管理は似ています。Gradle の使用を開始するには、Gradle をダウンロードする必要があります。Google または Yandex で「Gradle Build Tool」と入力すると、最初の結果に公式 Web サイト: https://gradle.orgが表示されます。Gradle のメイン ページには、「ドキュメント」というテキストのリンクがあり、Gradle ドキュメントにアクセスできます。まず、Gradle をインストールする必要があるため、ドキュメントの「 Gradle のインストール」セクションに注目します。「昔ながらの」方法を含め、多くのインストール方法があります。手動でインストールします (「手動でインストールする」)。指示に従って、gradle-5.1.1-bin.zip のような名前を持つ「バイナリのみ」タイプのファイルをダウンロードします。次に、アーカイブを解凍し、指示に従って PATH 環境変数を設定します。主なことは、指示を実行した後、コマンドによってgradle -vインストールされている Gradle のバージョンが表示されることです。場所を決定するときに、システムが希望する場所で Gradle を見つけられないという問題が発生する可能性があります。したがって、Windows では次のことができます (*nix には類似したものがあります): for %i in (gradle.bat) do @echo. %~$PATH:i これで、おそらく知り合いになり始めることができます。
Gradle の簡単な紹介 - 2

Gradle プロジェクトの初期化

Gradle はタスクと呼ばれるタスク(ここではタスクと呼びます)を実行するものであることにすぐに注意してください。タスクはさまざまなプラグインによって提供されます。公式ドキュメント「Gradle プラグインの使用」でプラグインの詳細を読むことをお勧めします。Gradle のインストール時に常に使用できる「コア プラグイン」のセットがあります。これらのプラグインにはさまざまなカテゴリがありますが、ここでは「ユーティリティ」カテゴリに興味があります。このセットには、Gradle プロジェクトを初期化するためのタスクを提供する「 Build Init Plugin 」プラグインが含まれています。プロジェクト タイプ「java-application」を作成することに興味があります。Gradle タスクを実行しましょう。 gradle init --type java-application 途中でいくつかの質問に答えてみましょう。たとえば、Groovy DSL (Gradle の標準タスク記述言語) と JUnit テスト フレームワークを使用したいという質問です (これについては別のレビューで説明します)。作成後、次のファイルのセットを受け取ります。
Gradle の簡単な紹介 - 3
まず、初期化後、Gradle のバージョン用に事前設定された特別なラッパーを受け取ります。これは特別なスクリプトです。公式ドキュメント「 The Gradle Wrapper 」で詳細を読むことをお勧めします。次に、Gradle ビルド スクリプト、つまり build.gradle ファイルが表示されます。これはメイン ファイルで、プロジェクトで使用するライブラリとフレームワーク、プロジェクトに接続する必要があるプラグイン、およびさまざまなタスクを記述します。このファイルについて詳しくは、公式ドキュメント「Build Script Basics」を参照することをお勧めします。
Gradle の簡単な紹介 - 4

プラグインとタスク

ビルド スクリプトの内容を見ると、プラグイン セクションが表示されます。
plugins {
    id 'java'
    id 'application'
}
これらは、前に説明したものと同じプラグインです。プラグインがある場合は、現在利用できるタスクもあります。gradle task コマンドを実行すると、プロジェクトで何ができるかを確認できます。
Gradle の簡単な紹介 - 5
たとえば、次を実行すると、gradle runJava アプリケーションのメイン クラスが起動します。
Gradle の簡単な紹介 - 6
ご覧のとおり、下にも同じことが書かれていますが、2 actionable tasks: 1 executed, 1 up-to-date これは何を意味しますか?これは、合計 2 つのタスクが完了したことを意味します。さらに、1 つは実際には完了しましたが、もう 1 つは実行されませんでした。それは最新です、つまり、状態は最新であり、何も行われていません。いわゆる「ドライラン」を実行できます。gradle run -m このコマンドを実行してみましょう。実行タスクを実行するためにどのようなタスクが実行されるかを確認します。
Gradle の簡単な紹介 - 7
ご覧のとおり、合計 4 つのタスクが完了しました。run が実行される前に、依存関係タスク クラスが実行されました。クラス自体には 2 つの依存関係があるため、compileJava と processResources も実行されます。タスクを実行するときは、特定のレベルのログを表示しながらタスクを実行できます (ログ レベルによって、どの程度重要なメッセージを確認するかが決まります)。たとえば、 を行うことができますgradle run -i。これにより、次のような情報メッセージも表示されます。
Task :classes UP-TO-DATE
Skipping task ':classes' as it has no actions.
Gradle へのログインの詳細については、公式ドキュメント「Gradle Logging」を参照することをお勧めします。ご覧のとおり、クラス タスクはUP-TO-DATEであるためスキップされました。つまり、状態が最新であり、何もする必要がないため、アクションはありませんでした。これは、デフォルトで Gradle に「最新チェック」、いわゆる増分ビルドがあるためです。このメカニズムの詳細については、Gradle ドキュメント「最新のチェック (別名、増分ビルド)」を参照してください。ただし、 --rerun-tasks フラグを指定してタスクを実行することで、このメカニズムを無効にすることができます。例えば、gradle run --rerun-tasks。実行可能なタスク 2 個: 実行されたタスク 2 個 ご覧のとおり、実行されたタスクの数は、グラフの最初のレベル、つまり実行タスク自体と、それが直接依存するタスクのみを考慮しています。 、 クラス。クラスが依存するタスクはここではカウントされません (ただし、クラス タスクの実行時に実行されます)。タスクについても読む必要があります。
Gradle の簡単な紹介 - 8

依存関係

ビルド システムの主なタスクの 1 つは、依存関係、つまりプロジェクトに必要なライブラリ/フレームワークを管理することです。ビルド システムは、それらが適切なタイミングで利用可能であることを保証し、アプリケーションの最終成果物を適切な方法でアセンブルする必要があります。デフォルトでは、Java アプリケーションの gradle init の後、ビルド スクリプトに次の内容が表示されます。
dependencies {
    implementation 'com.google.guava:guava:26.0-jre'
    testImplementation 'junit:junit:4.12'
}
ここでは、何を接続しているのかがすぐにわかります。しかし、ある程度の理解がないと、実装と testImplementation が何であるかが明確になりません。Gradle のドキュメントはよく書かれているため、ここでもう一度 Gradle ドキュメントに目を向ける必要があります。これは「依存関係構成の管理」と呼ばれます。ドキュメントに記載されているように、各依存関係は特定のスコープ (この依存関係が利用できる範囲) で宣言されます。このスコープは何らかの構成によって指定され、それぞれに一意の名前が付いています。多くの Gradle プラグインが事前定義された構成を追加していることも興味深いです。どのような構成があるかを確認するには、次のコマンドを実行します。 gradle --console plain dependencies これにより、使用可能なすべての構成とその依存関係のリストが表示されます。gradle --console plain dependencies | find " - " このリストをフィルタリングして、使用可能な構成自体のみを表示することができます 。ここで少し読む必要があります。なぜなら 「Java」プラグインを使用するので、そのドキュメントと「依存関係管理」セクションから始めましょう。ここでは、かつては「コンパイル」と呼ばれる設定 (別名スコープ) が存在し、それは「コンパイル中に必要な依存関係」を意味していたことがわかります。しかしその後、それは実装に置き換えられました (英語では Superseded)。置換の詳細については、「 API と実装の分離」セクションを参照してください。この依存関係は「コンパイル クラスパス」にあることがわかります。ただし、依存関係を最終成果物に含めたい場合もあります。何のために?たとえば、実行可能な jar があり、これ自体に必要なものがすべて含まれている必要があります。それでは何をすべきでしょうか?まず、「すぐに使える」 (つまり、デフォルトでは追加のアクションなし) ようなサポートはありません。これは、誰もが独自の方法でアーカイブを収集したいと考えており、Gradle は最小限に抑えようとしているという事実によって説明されます。また、(コード内で追加の操作を行わずに) クラスパス上で jar アーカイブを使用することもできません。そのようには機能しません (詳細については、 「 Oracle: JAR ファイルのクラスパスへのクラスの追加」を参照してください)。したがって、最も美しい方法は、ビルド スクリプト内の次のコードです。
jar {
    manifest {
        attributes 'Main-Class': 'jrgradle.App'
    }
    from configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
jar タスク設定では、jar ファイル マニフェストに何を追加するかを指定します (「Oracle: アプリケーションのエントリ ポイントの設定」を参照)。そして、コンパイルに必要なすべての依存関係が jar に含まれると言います。別の方法は、「Gradle Shadow Plugin」を使用することです。複雑に思えるかもしれませんが、他のプラグインを使用すると作業が簡単になります。たとえば、Web アプリケーションを作成するとき (通常の実行中の Java アプリケーションとは対照的に)、特別なプラグイン「Gradle War Plugin」を使用します。これは異なる動作を持ち、そこでの作業がより簡単になります (必要な依存関係はすべて、プラグイン自体によって別の特別なディレクトリに配置される必要があります。そのような作業は、Web アプリケーションの構造方法によって規制されます。しかし、それはまったく別の話です)。
Gradle の簡単な紹介 - 9

結果

Gradleは、プロジェクトのビルド システムとして最適です。これは、Spring や Hibernate などの有名なプロジェクトの開発者によって使用されているという事実によって確認されます。上記では最も基本的なことだけを説明しました。その背後には、開発者に現れる何百万もの機能と機会が隠されています。Gradle はマルチモジュール プロジェクトの作成もサポートしていますが、このレビューでは取り上げていませんが、Gradle 自体には「マルチプロジェクト ビルドの作成」という優れたチュートリアルがあります。このレビューが、Gradle のドキュメントが 5 以降で書かれていること、どこを見るべきかを理解していれば必要なものを簡単に見つけることができることも示してくれたことを願っています。そして、これは基本を理解したときに得られます。さらに、Gradle には優れたチュートリアルがあります。最後に、Gradle を使用して他に確認できることの小さなリストを示したいと思います。
Gradle の簡単な紹介 - 10
#ヴィアチェスラフ
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION