10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Android】複数のプロジェクトにまたがるdependenciesの解決

Last updated at Posted at 2016-01-14

言葉

この記事で使用する言葉を以下の通り定義します

言葉 意味
プロジェクト Android Studioでいうプロジェクト. gradle.settings があるところ.(だいたいの場合において)
モジュール Android Studioでいうモジュール.プロジェクト以下のアプリケーションとかライブラリのこと

はじめに

モジュールが増えて少し大きなプロジェクトになると,例えばプロジェクトAのライブラリを用いてプロジェクトBを立てることもあると思います.
私の所属するチームの場合,プロジェクトAで作成したアプリケーションのサブツール(バッチやらデバッグ用ツールなど)をプロジェクトBで管理しています.
Gitリポジトリはプロジェクト毎に切っていて,A, BそれぞれGitリポジトリとなっています.

依存問題

プロジェクトBはプロジェクトAに依存しているので,プロジェクトBにプロジェクトAをサブモジュールとして登録します
仮にこんなディレクトリ構造になったとしましょう

└─ProjectB
    ├─Module1
    └─ProjectA // (git submodule)
        ├─Library1
        ├─Library2
        └─Module1

[ProjectB-Module1] が, [ProjectA-Library2]に依存していると仮定します.

この状態で素直に gradle.settings を書くと

include ':Module1'
include ':ProjectA:Library2'

となります.
この依存関係であれば上手くいくのですが,以下の条件でビルドが通らなくなります

  • [ProjectA-Library2] は [ProjectA-Library1] に依存する

上の条件が足されると,

include ':Module1'
include ':ProjectA:Library1'
include ':ProjectA:Library2'

では通りません.
:ProjectA:Library2build.gradledependencies ブロックに :Library1 としか書いていないため, [ProjectA-Library2] が依存する [ProjectA-Library1] を解決できないためです.

プロジェクトの場所を指定してあげる

前置きが長くなりましたが,要はプロジェクトBとプロジェクトAは同じ階層にあるように見せてあげれば良いです.
それは プロジェクトB の gradle.settings に記載します.

include ':Module1'
include ':Library1'
include ':Library2'

project(':Library1').projectDir = new File('ProjectA/Library1');
project(':Library2').projectDir = new File('ProjectA/Library2');

こうすることで,プロジェクトAに余計な変更を強いず,プロジェクトBは git submodule のプロジェクトAに素直に依存しながら,依存解決もできるようになります.

10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?