2016-08-14 9 views
0

私はGradleで構築された2つのアプリケーションによって使用される1つのライブラリを持っているとしましょう。どうすればライブラリを編集/コンパイルすることができますか(ファイルシステム内の完全に異なるフォルダ)、ライブラリを使用してアプリケーションをコンパイルすることはできますか?Gradleの "ローカルリポジトリ"はMavenに似ていますか?

問題は、デフォルトでは、ライブラリとアプリが同じプロジェクトディレクトリにあるべきであるということである。

project 
|--library 
L--app 
ので、アプリの build.gradleファイルは次のようになり

:これはそれ以来の問題である

compile(project(":library")) 

ライブラリファイルがアプリケーションフォルダと同じフォルダに格納されている必要があります。また、2つのアプリケーションがあるため、実現できません。

私はMavenの経験があり、次のように解決しました。アーティファクトはローカルのMavenストレージに保存され、アプリケーションから参照できるため、ファイルシステム内のどこにも関係ありません。 Gradleの同様のソリューション?

PS。これは次の質問です:私はサードパーティ製のライブラリを使用したいのですが、私はそれをプロジェクトフォルダにコピーし、compile project ':library'を使って参照する必要がありますか? 'groupId + artifactId + version'だけで完全に独立したファイルシステムの場所と参照に複製する方法はありますか?

+1

のGradleが建てるを公開することができますにプロジェクトレベルの依存関係を追加しますコンパイルするたびにコンパイルされます

include $yourLibName def p = findProject(":$yourLibName") p.projectDir = new File(settingsDir, absolutePathToYourLibraryDir) 
  • その方法ライブラリをMavenローカルリポジトリ(デフォルトでは '〜/ .m2')にコピーしてください。 'maven'プラグインを適用し、' install'タスクを実行するだけです。 https://docs.gradleを参照してください。org/current/userguide/maven_plugin.html –

  • +0

    サードパーティのライブラリを使いたい場合は、mavenプラグインを適用し、mavenセントラルリポジトリ(または必要なライブラリを含む他のMavenリポジトリ)を追加してから参照してくださいそのライブラリは 'groupId + artifactId + version'によって作成されます。 –

    +0

    はい、私はGradle用のMavenプラグインについて知っていて、MavenアーティファクトをローカルMavenリポジトリに公開しています。しかし、それはGradleにそのような解決策がないことを意味し、それは奇妙に見えます。ところで、私は公共のmavenリポジトリに公開されているmavenの成果物を使うことができますが、すべてのlibs(あるいは最後のバージョン)が公開されているわけではありません。 – 4ntoine

    答えて

    0

    あなたがでていることを達成することができますライブラリのbuild.gradle

    • あなたは

      apply plugin: 'maven-publish' 
      

      を追加し、 "インストール" します:

      1. 共有コンパイルされたライブラリのバイトコード executiによるローカルリポジトリのアーティファクトNG gradle publishToMavenLocalアプリあなたが公表案件を指すとリポジトリとしてローカルのMavenリポジトリを指定しますで

      2. repositories { 
            mavenLocal() 
        } 
        dependencies { 
            config "yourArtifactGAV" 
        } 
        
  • 共有プロジェクトソースとビルドの一部として追加

    • アプリケーションディレクトリには、settings.gradle fil E:ライブラリが自動的にアプリケーションが+、あなたがそれ

      dependencies { 
          config project(':$yourLibName') 
      } 
      
  • 関連する問題