web-dev-qa-db-ja.com

Gradleにsettings.gradleファイルが必要なのはなぜですか?

AndroidプロジェクトをAntからGradleに変換します。

私のEclipseワークスペースは非常にシンプルです:

Workspace
     MyApp
     MyApp-AndroidLibrary

MyAppにbuild.gradleファイルを追加するとき、Androidライブラリプロジェクト:

apply plugin: 'Android'

dependencies {
     compile fileTree(dir: 'libs', include: '*.jar')
     compile project(':MyApp-AndroidLibrary')
}

Gradleビルドを実行すると、「パス ':MyApp-AndroidLibrary'のプロジェクトがルートプロジェクトで見つかりませんでした」というエラーが発生し、これをグーグルで検索して、ワークスペースに「settings.gradle」ファイルを設定する必要があることがわかりました追加するディレクトリ

include ":MyApp"
include ":MyApp-AndroidLibrary"

これは私にはあまりにも悪いようです、Gradleにsettings.gradleファイルが必要な理由、なぜ依存関係で定義したプロジェクトを抽出しないのですか?

そして、includeは本当に何を意味するのでしょうか?ワークスペースにanotoherアプリと他の共有ライブラリがある場合、構造は次のようになります。

Workspace
     App1
     App2
     Library1(Used by App1 & App2)
     Library2(Used only by App1)
     Library3(Used only by App2)

Settings.gradleファイルは1つしかないため、すべてをsettings.gradleに追加する必要がありました。それはいい匂いがしません。

そして、はい、Library2をApp1の子ディレクトリに、Library3をApp2の子ディレクトリにするように構造を再編成できますが、Library1はどうですか?

これについて何かコメントはありますか?

39
virsir

いくつかの異なる質問をしています。ヒントを次に示します。

  • ':MyApp-AndroidLibrary'logicalプロジェクトパスであり、settings.gradleで提供される情報に基づいて物理パスにマッピングされます。
  • マルチプロジェクトビルドは、settings.gradleで設定される任意のディレクトリ構造を持つことができます。必要な場合を除き、ディレクトリを移動する必要はありません。
  • EclipseワークスペースとGradleビルドは別々の境界です。同じワークスペースに複数のビルドを含めることができます。
  • ソースからビルドされたライブラリを使用する場合、それらを同じビルドの一部にするか、個別のビルドを用意することができます。後者の場合、アプリの前にライブラリをビルドし、MavenまたはIvyリポジトリを介してアーティファクトを交換する必要があります。これは、CIサーバーと企業のMaven/Ivyリポジトリを使用して自動化できます。または、マシン上でライブラリのビルドを手動でトリガーし、ローカルのMaven/Ivyリポジトリを使用することもできます。

詳細については、 Gradle User Guide 、特にマルチプロジェクトビルドに関する章をご覧ください。

14

念のために(私や嬉しい人のような)人々がまだこの問題を抱えており、解決策を見つけることができませんでした。 Gradleの現在のバージョンでは、これを行うことができます。

ファイルsettings.gradleをディレクトリMy-Appに移動し、includeincludeFlat 'MyApp-AndroidLibrary'に置き換えます。これで問題が解決するはずです。

また、 この質問 を比較し、詳細については、Gradleユーザーガイドの このセクション を参照してください。

0
Joerg