web-dev-qa-db-ja.com

Gradle依存関係:相対パスでプロジェクトをコンパイルします

gradleの依存関係(Android studio)を現在のプロジェクト境界外の別のgradleプロジェクトに指定することは可能ですか?たとえば、次のような相対パスを使用して:

dependencies {
  compile project('../../stdlib/dagger')
}

だから私はこのようなものです:

Androidアプリケーションがあります。構造は次のようになります。

  • MyApp(パスは/Users/foo/workspace/MyApp)
    • app(パスは/ Users/foo/workspace/MyApp/appです)

そして、私はgradle Android 3つのサブモジュールを含むライブラリプロジェクト:

  • stdlib(パスは/Users/foo/workspace/stdlib)
    • ダガー(パスは/ Users/foo/workspace/stdlib/dagger)
    • utils(パスは/ Users/foo/workspace/stdlib/utilsです)
    • http(パスは/ Users/foo/workspace/stdlib/httpです)

私が欲しいのは、短剣、utils、httpモジュールをMyAppプロジェクトにコンパイルすることです。

Stdlibライブラリモジュールは開発中です。MyAppの成長とともに成長します。したがって、少し変更を加えるたびにそれらをMavenリポジトリにプッシュしたくありません。

だから、何らかの形で他のgradleプロジェクトをリンクする可能性はありますか?一時的な解決策を探しています。ソースが安定したら、stdライブラリをmavenリポジトリにプッシュします。

また、回避策として、sourceSetを使用したソリューションが可能になります。また、stdlibへのシンボリックリンクであるMyAppにライブラリフォルダーを作成することも検討しましたが、期待どおりに動作しませんでした。

  • MyApp(パスは/Users/foo/workspace/MyApp)
    • app(パスは/ Users/foo/workspace/MyApp/appです)
    • ライブラリ(/ Users/foo/workspace/stdlibへのシンボリックリンク)
 dependencies {
      compile project(':libraries:dagger')
    }

Gradleでそのような依存関係を解決する方法はありますか?

31
sockeqwe

メインプロジェクトの「settings.gradle」ファイルを使用して、外部ルートプロジェクトモジュールを含めることができます。 gradleプロジェクトでもある必要があり、特定のAndroidビルド状況では、すべてのモジュールを「Androidライブラリ」プラグインプロジェクトとして設定する必要があります。

たとえば、「MyApp」プロジェクトのsettings.gradleでは、これを試すことができます。

include 'app'
include 'dagger'
project(':dagger').projectDir = new File('/Users/foo/workspace/stdlib/dagger')

'MyApp' build.gradleは、相対パスGradleの方法で 'dagger'モジュールの必要性を反映する必要があります。

dependencies {
  compile project(':dagger')
}

以上です。必要なすべての外部モジュールでこの手順を繰り返すと、適切なGradleマルチプロジェクト構成ができます。

81
Martin Revert