web-dev-qa-db-ja.com

Gradleの目的は何ですか?

Android Studio 0.4.0。以前にGradleを使用したことがなく、問題が発生しているだけです。私はそれについて十分に知らないので、その目的/利点を見ていません。

私が持っているいくつかの特定の質問

  1. これらの依存関係は何ですか?ネイティブでサポートされるべきAPI11 +を対象とした、ナビゲーションドロワーを備えたシンプルなアプリを作成しています。どのような依存関係を使用できますか?

  2. Gradleラッパーとは何ですか?完成したアプリケーションにどのような変更が加えられますか?

  3. Gradleが常にオンラインである必要があるのはなぜですか?仕事中は、個人のラップトップでインターネットにアクセスできません。 Gradleはインターネットにアクセスできないと一部のリソースを解決できないため、アプリを実行またはテストできないようになりました。

  4. GradleがGroovyを使用することが重要なのはなぜですか?私はインターネットを検索しましたが、それはGradleについて人々が好きなものになる傾向がありますが、Groovyが重要である理由や、Androidアプリで何をするのか)は通常説明されていません。

情報が過度に単純または過度に複雑になる傾向があるため、中級プログラマーとしては難しい場合があります。私の特定の質問は別として、あなたが提供できるどんな追加情報も役に立つでしょう。 Gradleと同じことを行う可能性のある他のツールの長所と短所について議論するつもりはありません。情報に基づいた決定を下せるように、Gradleとその使用法について詳しく知りたいと思います。

ありがとう

31
DataCat Robin

あなたの質問のいくつかは、ビルドツールが一般的な問題として良いことである理由を話しているという点で一般的です。特にGradleにアクセスする人もいます。私は、他の人のつまらない用語を避けながら、両方のカテゴリにできるだけ簡潔に対処するように努めます。

Maven、Gradle、SBT、Leiningenなどのビルドツールは、手動で実行または「手動で自動化」する必要があるタスクを自動化するのに役立ちます。後者を使用して、Antで行っていたことを説明します。つまり、Javadocをコンパイル、実行、生成するためのカスタムタスクを記述して、将来のタスクを自動化できるようにします。 Mavenによって最初に定義され、その後他の人によって採用された規則(ソースをsrc/main/Javaに入れるなど)に準拠することで、これが可能になります。規則に従えば、ビルドツールは最小限の追加作業でコンパイル、実行、Javadocの生成、テスト、その他すべてを行うことができます。

今あなたの質問に(順番に):

  1. ビルドツールのもう1つの重要な機能は、ビルド間で一貫した方法で依存関係を管理することにより、「jarhell」を減らすことです。必要なApacheCommons、Google Guava、Spring、Jacksonのバージョン(またはバージョンの範囲)を指定するだけで、ビルドツールがそれらをダウンロードしてどこかに配置し、クラスパスやビルドに含めることができます(たとえば、戦争ファイル)。スコープを定義することもできます。たとえば、この依存関係をコンパイル時に使用できるようにしたいのですが、他の依存関係は実行時にのみ使用できるようにします。明示的に提供する必要がありますか、それとも利用可能になりますか?そのようなもの。
  2. これはGradle固有です。説明されているように ここ 、Gradleラッパーは、一貫性を維持しながら、Gradleを手動でインストールすることなくチームがGradleを実行するのに役立ちます。誰もが同じバージョンを使用しています。一度設定すれば、心配する必要はありません。使用したいすべてのGradleタスクはラッパーを介して利用できるため、そこにあることを気にする必要はありません。 Gradleを直接インストールして直接実行することもできますが、その要点はほとんどわかりません。
  3. これは一般的です。依存関係の管理については前に説明しました。これらの依存関係を取得するには、ビルドツールをオンラインにして、MavenCentralまたは多数のサードパーティリポジトリから利用できるようにする必要があります。他の人が採用しているもう1つのMavenイノベーションは、リポジトリ管理であるため、コンパイルされたアーティファクトは、他のプロジェクトが使用できるように、慣例に従ってリポジトリに公開されます。通常、あなたはそれを気にしません。ツールに特定の依存関係が必要であると伝えるだけで、誰もが規則に従うため、ツールはそれを取得する方法を知っています。インターネットにアクセスできない状況(私がよく知っていること)では、オンラインのときにすべての依存関係を取得し、オプションで、NexusやArtifactoryなどのローカルMavenリポジトリをセットアップしてそれらのアーティファクトを公開することができます。次に、ビルドツールにMavenCentralなどと同様にそこを参照するように指示します。
  4. MavenはXMLで構成されており、当時はそれが本当にクールに思えました。しかし、2つの結果があります。 1つは、構成が非常に冗長になることです。もう1つは、カスタム作業が難しくなることです。 XMLですべてを宣言的に行う必要がありますが、これは多くの人にとって苦痛です。プラグインをXMLで構成するか、独自に作成して、Mavenが理解してXMLで構成できる方法でプラグインをラップします。コードでカスタムビルドを行う方がはるかに簡単で強力です。 GradleはこれにGroovyを選択しました。これは、GroovyがNice DSLを作成し、Mavenから来たJava開発者にとって非常に簡単に習得できるためです。 SBTはScalaを選択し、LeiningenはClojureを選択しました。これらのビルドツールはこれらの言語/プラットフォームを対象としているため、たとえばScala開発者は、SBTを使用するために新しいことを学ぶ必要はありません。 DSL。しかし、より広いポイントは、XMLではなくコードに依存することには多くの利点があるということです。

お役に立てば幸いです。

21
Vidya

これらの依存関係は何ですか?

あなたが使用することに決めるかもしれない非常に多くのクールなライブラリがあります。そして、これらのライブラリの多くは現在、gradleとの統合をサポートしています。したがって、プロジェクトをインポートして自分でホストする必要はもうありません。すべてがmavencentralでホストされています。たとえば、API 11以降をターゲットにすることにした場合でも、サポートライブラリが必要です。

Gradleラッパーとは何ですか?

チームで作業している場合、または特にオープンソースプロジェクトで作業している場合、gradleラッパーは素晴らしいツールです。 Gradleをインストールする必要はありません。 Gradleラッパーは、最初の実行時にすべての依存関係をダウンロードしてキャッシュします。したがって、チームのすべての開発者は、プロジェクトを非常に迅速に構築できます。

Gradleが常にオンラインである必要があるのはなぜですか?

依存関係を同期する必要があるためです。 Android Studioを使用している場合は、幸運です。最新バージョンは「gradleオフラインモード」をサポートしています。

リリースノート から:

StudioはGradleオフラインモードをサポートするようになりました。これは、ネットワークに接続しておらず、依存関係がプラス構文を使用して利用可能な最新バージョンを取得している場合に役立ちます。その場合、Gradleは1日に1回(デフォルトで)アーティファクトリポジトリに接続して、より新しいバージョンがあるかどうかを確認します。そのネットワーク接続が失敗すると、ビルドは失敗します。ネットワーク接続がない場合、これは問題があります。これで、[コンパイラ]> [Gradle]オプションを開き、オフラインモードを有効にできます。これにより、Gradleは最新の更新チェックを無視するようになります。

gradle offline mode

GradleがGroovyを使用することが重要なのはなぜですか?

Groovyでgradleプラグインを作成します。また、build.gradleのすべてのgradleタスクも同様です。


注意:私はgradleの専門家ではありません。実際、比較的新しいユーザーでもあります。

22
Ahmad

Gradleのオンライン部分が必要な理由については、誰もが述べていることを理解していますが、ファイアウォールの背後にいる私たちにとって、またはオフラインで作業している可能性がある場合は、少なくとも1回はオンラインにする必要があります。オフラインモードでコンパイルできるようにします。

この要件がプロジェクトに課せられている理由がわかりません。コンセプトをテストしたいAndroid St​​udioでまったく新しいプロジェクトを開始した場合はどうなりますか?少なくとも一度はオンラインにしないと、それはできません。その時点でインターネットにアクセスできず、これを実行したい場合はどうなりますか?では、どうしますか?

回避できる不要な問題で開発者に負担をかける不要な要件のようです。繰り返しになりますが、その背後にある理由は理解していますが、それでも、オフラインで使用するために少なくとも一度オンラインでコンパイルするという要件を強制することは少しばかげているようです。

Gradleを使いたいのですが、現時点ではオンラインの要件のため、職場でも使えないものです。セキュリティ部門と協力して、これを許可するためにファイアウォールにどの穴を開けるかを決定し、プロキシを正しく設定して許可する必要があります。

そのため、現時点では、Gradleを私の職場で使用することをお勧めすることはできません。つまり、AndroidStudioではなくAndroid開発にもEclipseを引き続き使用します。必要ではないように思われる制限要件のようです。

5
bolski

次の点を理解することが、賛成の根拠となると仮定しましょう。

  1. クラス、インターフェース、API、パッケージ、モジュール、ライブラリとは何ですか。

  2. モジュールの依存関係とは何ですか?「依存関係の管理」とはどういう意味ですか。

  3. 最新のアプリケーションの複雑さ。単純な「Hello、world」アプリ(デスクトップアプリケーションまたはWebアプリケーション)を実行する場合でも、さまざまなライブラリが12個(100個ではないにしても)含まれている必要があります。これらのライブラリはすべてアプリにインフラストラクチャを提供しますが、それらの多くはアプリのロジックに直接関係していません。

  4. アプリが「Hello、world」でない場合は、(適切なモジュール化によって)複雑さを隠し、(適切なビルドツールを使用して)アセンブリとテストを自動化することが成功に不可欠です。

この理解を念頭に置いて(そして上記の親愛なる同僚によってリストされた貴重な考慮事項を考慮に入れて)、gradle、ant、ivy、mavenについて話し始めるのは理にかなっています。

2
akhikhl