Gradle での相対的なプロジェクト依存関係? 質問する

Gradle での相対的なプロジェクト依存関係? 質問する

Gradle プロジェクトの依存関係を指定するときに、完全な絶対プロジェクト名の使用を避けて、代わりに相対プロジェクト名を使用できますか? (つまり、私の例では、:domain-a を参照するときに :app-a を明示的に指定したくありません)

//Directory structure
app-a/
  domain-a/
    build.gradle
  webapp-a/
    build.gradle

WebApp-A ビルド.gradle:

apply plugin: 'java'

//Build.gradle for webapp-a
dependencies {

  // Works
  compile project(':app-a:domain-a')

  //Doesn't work
  compile project(projectDir.path + '/../domain-a/')

  //Doesn't work
  compile findProject('../domain-a')

  //Doesn't work
  compile project(':domain-a')
}

ベストアンサー1

Android Studio と Gradle を使用した Android 開発の場合、プロジェクトのルート下ではなく相対パスを持つライブラリをコンパイルする方法は次のとおりです。

  1. ライブラリを settings.gradle に含め、projectDir をオーバーライドします。

    include 'MyTestLibProject:MyTestLib'
    project(':MyTestLibProject:MyTestLib').projectDir = new File(settingsDir, '../MyTestLibProject/MyTestLib')
    
  2. ライブラリの build.gradle を編集して、android ではなく android-library プラグインを使用します。これにより、ライブラリ出力がそれを参照するプロジェクトに含まれるようになります。

    apply plugin: 'android-library'
    
  3. 非 lib プロジェクトの build.gradle を編集して、プロジェクトが lib に依存していることを指定します。

    compile project(path: ':MyTestLibProject:MyTestLib')
    
  4. ライブラリにプロジェクトにも含まれている jar が含まれている場合、ビルドは apk を生成するときにそれらを衝突と見なします。プロジェクトとライブラリの両方が参照する追加のライブラリに jar を抽象化するか、衝突している jar をメイン プロジェクトから除外して、依存関係から jar を取得できるようにします。

    dependencies {
        compile fileTree(dir: 'libs', include: '*.jar', exclude: '**/android-support-v4.jar')
        compile project(path: ':MyTestLibProject:MyTestLib')
    }
    

免責事項: これは、Gradle が推奨する方法ではありません。Maven を使用してライブラリを公開し、公開されたライブラリの「POM」(バージョン番号を含む) を使用して依存関係を参照することを意図しています。これにより、依存関係の管理が向上します。たとえば、Maven は、さまざまなバージョンの共通ライブラリを使用する多くのプロジェクト (リリース サイクルが異なる) があるシナリオを簡素化します。ここで説明する相対パス手法は、小規模なプロジェクトをすばやく起動して実行する方法、または ant から移植されるプロジェクトの中間ステップとして使用できます。

参照:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-ライブラリプロジェクトの作成

おすすめ記事