Gradleラッパーファイルを生成する方法とタイミング


212

Gradle Wrapperの仕組みを理解しようとしています。多くのソースリポジトリでは、次の構造が見られます。

projectRoot/
    src/
    build.gradle
    gradle.properties
    settings.gradle
    gradlew
    gradlew.bat
    gradle/
        wrapper/
            gradle-wrapper.jar
            gradle-wrapper.properties

私の質問:

  1. どのように/ 1が発生しない場合にはgradlew/ gradlew.bat?プロジェクトが最初に作成されたときに一度だけ生成することになっていますか?変更をコミット/プッシュするたびに生成しますか?そして、それらはどのように生成されますか?
  2. 上記と同じ質問ですが、gradle/wrapper/*ファイル(gradle-wrapper.jarおよびgradle-wrapper.properties)についてですか?
  3. *.gradleプロジェクトのgradleディレクトリ内に他のファイルが表示されることがあります。これらの追加のGradleファイルとは何ですか?それらは何を表していますか?カスタムプラグイン?
  4. 入るプロパティとsettings.gradle内部で定義する必要があるものの違いは何gradle.propertiesですか?

回答:


250
  1. プロジェクトで使用するGradleのバージョンを変更したい場合は、一度生成します。頻繁に生成する必要はありません。ここにドキュメントがあります。wrapperタスクをbuild.gradleファイルに追加し、このタスクを実行してラッパー構造を取得するだけです。

    ラッパーを生成するには、Gradleをインストールする必要があることに注意してください。g-ecosystemアーティファクトを管理するための優れたツールはSDKMANです!。Gradleラッパーを生成するには、次のコードをbuild.gradleファイルに追加します。

    task wrapper(type: Wrapper) {
       gradleVersion = '2.0' //version required
    }
    

    そして実行します:

    gradle wrapper
    

    仕事。結果のファイルをSCM(例:git)に追加すると、Gradle Wrapperを使用する場合、すべての開発者が同じバージョンのGradleを使用できるようになります。

    Gradle 2.4以降では、専用のタスクを追加せずにラッパーを設定できます。

    gradle wrapper --gradle-version 2.3
    

    または

    gradle wrapper --gradle-distribution-url https://myEnterpriseRepository:7070/gradle/distributions/gradle-2.3-bin.zip
    

    詳細はこちら

Gradleからの3.1 --distribution-typeオプションも使用できます。オプションは、binaryとallおよびbinです。すべて加えて、ソースコードやドキュメントが含まれています。IDEを使用する場合もすべてが優れているため、エディターの動作が向上します。欠点は、ビルドが長く続く可能性があり(より多くのデータをダウンロードする必要があり、CIサーバーでは無意味)、より多くのスペースを必要とします。

  1. これらはGradle Wrapperファイルです。それらを(特定のバージョンに対して)一度生成し、バージョン管理に追加する必要があります。Gradle Wrapperのバージョンを変更する必要がある場合は、build.gradle(1。)を参照してバージョンを変更し、ファイルを再生成します。

  2. 詳細な例を挙げてください。このようなファイルには、マルチモジュールプロジェクト、責任の分離、わずかに変更されたスクリプトなど、複数の目的があります。

  3. settings.gradleプロジェクトの構造(モジュール、名前など)を担当しますが、gradle.propertiesプロジェクトおよびGradleの外部詳細(バージョン、コマンドライン引数-XX、プロパティなど)に使用されます


@Opal(+1)に感謝-#3の具体例を示すには、Netflix-Eurekaをご覧ください。これらのGradleファイルは何ですか?
smeeb 2014

わかりました。私の知る限り、Netflixの開発者は1つの大きなbuild.gradleスクリプトを複数の短いスクリプトに分割し、1つの特定の目的のスクリプトに専念しました。あなたは下にあるスクリプトができたようGradleでは dirがメインに適用されるbuild.gradleファイル、ビュー:github.com/Netflix/eureka/blob/master/build.gradleを。そのようなモジュールをどこに置くかはあなたの選択です。これですべてです。答えに満足したら、答えを受け入れてください:)
Opal

1
もう1つの便利なコマンドラインオプションは--distribution-type、たとえば、gradle wrapper --gradle-version 4.3.1 --distribution-type ALL
heenenee '15年

1
@heeneneeに感謝します。私の回答に追加します。
オパール

ヒント:Android StudioのインストールフォルダーにはGradleがあります。
TWiStErRob 2018年

29

Gradleラッパーの生成

プロジェクトビルドグラドル

// Top-level build file where you can add configuration options common to all sub-projects/modules.

// Running 'gradle wrapper' will generate gradlew - Getting gradle wrapper working and using it will save you a lot of pain.
task wrapper(type: Wrapper) {
    gradleVersion = '2.2' 
}

// Look Google doesn't use Maven Central, they use jcenter now.
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

次に、コマンドラインで実行します

gradle wrapper

システムにgradleがない場合はインストールしてください。そうしないと、上記は機能しません。Macでは、Homebrew経由でインストールするのが最適です。

brew install gradle

ラッパータスクを正常に実行してを生成しgradlewたら、システムグラドルを使用しないでください。それはあなたに多くの頭痛の種を救います。

./gradlew assemble

上記のgradleプラグインはどうですか?

com.android.tools.build:gradle:1.0.1

バージョンを最新に設定する必要があります。ツールページ確認して、それに応じてバージョンを編集できます。

Android Studioが生成するものを確認する

Gradleの追加と最新のAndroid Studioにより、プロジェクトのレイアウトが劇的に変わりました。古いプロジェクトがある場合は、最新のAndroid Studioでクリーンなプロジェクトを作成し、Googleが標準プロジェクトと見なしているものを確認することを強くお勧めします。

Android Studioには、古いプロジェクトをインポートする機能もあり、これも役立ちます。


gradleVersion = '2.2'中には、taskWrapper私はラッパーを生成するために望むものは何でもバージョン、正しいを使用することができますか?Gradleの最新バージョンである必要はありませんか?
ラフィアン

1
2シリーズのグラドルに戻れると思います。2.xより前のバージョンについては完全に確信はありませんが、最新の絶対バージョンに従う必要はありません。
Cameron Lowell Palmer

18

Gradle 2.4以降gradle wrapper --gradle-version X.Xでは、build.gradleファイルにタスクを追加することなく、を使用して特定のバージョンのGradleラッパーを構成できます。次にラッパーを使用するときに、一致する適切なGradleディストリビューションがダウンロードされます。


10

あなたがソースとドキュメントとダウンロードのGradleにしたい場合は、Gradleの-wrapper.properitesで構成されたデフォルトの配布URLはneed.Itは満足しないだろうhttps://services.gradle.org/distributions/gradle-2.10-bin.ziphttps://services.gradle.org/distributions/gradle-2.10-all.zipではありませんこの完全なURLは、Android StudioなどのIDEによって提案されます。完全なGradleをダウンロードする場合は、このようなラッパータスクを構成できます。 :

task wrapper(type: Wrapper) {
    gradleVersion = '2.13'
    distributionUrl = distributionUrl.replace("bin", "all")
}

1
Gradleの最近のビルドでは(どちらが正確かわからない)、URLを手動で書き換えるのではなく、同じクロージャーで組み込みコマンドを使用するのがおそらく最善です。distributionType = Wrapper.DistributionType.ALL
Dave Birch

6

これは、ソースコードを含むライブラリの配布バージョンを取得するようにラッパーをアップグレードするようにGradleに指示するために使用するコマンドです。

./gradlew wrapper --gradle-version <version> --distribution-type all

"all"でdistribution-typeを指定すると、Gradleは開発環境で使用するためにソースファイルをダウンロードします。

長所

  • IDEはソースコードにすぐにアクセスできます。たとえば、Intellij IDEAは、ビルドスクリプトを更新してソースディストリビューションを含めるように求めるプロンプトを表示しません(このコマンドが既にそれを実行したため)。

短所

  • ソースコードをダウンロードするため、ビルドプロセスが長くなります。これは、ソースコードが不要なビルドサーバーまたはCIサーバーでの時間とスペースの無駄です。

ビルドサーバーにソースをダウンロードしないようにGradleに指示するコマンドラインオプションを知っている場合は、コメントするか、別の回答を提供してください。


1
この設定はライブラリに関するものですか?公式ドキュメントは別の言い方をし、ラッパー自体にのみ言及しています:「ラッパーが使用するGradleディストリビューションのタイプ。」docs.gradle.org/current/dsl/...
トルステンSchöning

2
  1. これらは一度生成しますが、新しい機能が必要な場合や、新しいGradleバージョンが必要なプラグインから何かが必要な場合は更新します。

    最も簡単な更新方法:Gradle 2.2以降では、完全またはバイナリのGradleディストリビューションをダウンロードして抽出し、実行することができます。

    $ <pathToExpandedZip>/bin/gradle wrapper
    

    タスクを定義する必要はありませんが、おそらく何らかの種類の build.gradleファイルです。

    これは、更新または作成するgradlewと、gradlew.batラッパーをなどgradle/wrapper/gradle-wrapper.propertiesgradle-wrapper.jarラップのGradleの現在のバージョンを、提供します。

  2. これらはすべてラッパーの一部です。

  3. 一部のbuild.gradleファイルは、サブプロジェクトまたはモジュールであるサブディレクトリ内の他のファイルまたはファイルを参照します。少し複雑になりますが、プロジェクトが1つの場合は、基本的に1つのファイルが必要です。

  4. settings.gradleプロジェクト、モジュール、その他の種類の名前と設定を処理し、gradle.properties必要に応じてGradleファイルの再利用可能な変数を構成します。


2

Gradle組み込みタスクは4.8で廃止されたので、以下を試してください

wrapper {
   gradleVersion = '2.0' //version required
}

そして走る

gradle wrapper
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.