2016-08-13 8 views
0

JavaプロジェクトのビルドツールとしてGradleに移行しています。 メインプロジェクト(A)は他のプロジェクト(BとC)に依存しています。現時点でSCMを使用したGradle Multiproject

は、これらのプロジェクトのそれぞれが個別にCVSにあり、私はAIをコンパイルするときにAをチェックアウトする必要があり、私は同じB.はC.

のために行くのチェックアウトれるいわゆるBにサブディレクトリを作ります

私は、BとCを公開できるリポジトリマネージャ(nexus)に移行します。これが起こると、モジュールAはBとCに依存するだけで、それはNexusから得ることができます。

しかし、BとC(テスト目的のため)を公開したくなく、BとCの最新のコードでAをNexusにコミットせずにビルドしたい場合は、問題が発生します。

私の最初の考えは、BとC用のjarファイルをビルドして、それをA用の "lib"フォルダにプルすることです。しかし、確かに良い方法があります。

mavenでは、ローカルのMavenキャッシュにBとCをインストールする "mvn clean install"を実行できます。 Aは適切なジャーを探します。

しかし、これが最良の方法であることはまだ分かりません。私はgradleサブプロジェクトを見ていたが、私はそれらを完全に理解していない。サブモジュールはSCMでどのように扱われますか(私もgitサブモジュールを使用する必要がありますか?)

この状況のベストプラクティスについては、いくつかのガイダンスを参考にしてください。 おかげ

EDIT:

ヴャチェスラフShvetsから以下の回答が、私がこれまでに発見した最も正確な答えです。 Mavenスタイルの依存関係を持つgradleプロジェクトの依存関係を切り替えるもう1つの方法があります。この方法の

if(project.hasProperty("someSwitch")){ 
    configurations.all{..... 
    .... 
    } 
} 

使い方は次のようになります:

gradle build -Psomeswitch 

答えて

0

古い(古典)の方法これは、周りをラップすることができ https://docs.gradle.org/current/userguide/dependency_management.html#sec:project_to_module_substitution

で説明したように、これは、依存関係の置換を含みます

Mavenと同じアプローチ:

  1. ビルドが正常にタスクの入力と出力

  2. を使用している場合、プロジェクトB

    B

  3. 実行gradle clean install実は、あなたがcleanにすべての時間を持っていないプロジェクトでmavenプラグインを適用します。プロジェクトAでは、mavenLocal()リポジトリを追加してビルドを実行します。

新しい方法(experemental) - コンポジットビルド

複合ビルドを使用すると、単一のマルチプロジェクトを使用していたかのようにあなたはGradleのビルド複数組み合わせて、プロジェクトの依存関係を持つ外部バイナリの依存関係を置き換えることができますビルド https://docs.gradle.org/2.13/release-notes

これはまだ完全には利用できません。 2.13以降、Tooling API(Eclipse IDE用のBuildship 2.0プラグインなど)を介して使用できます。一般的な使用法は3.1で利用できるようになりますが、あなたは毎晩、あなたが次のように表示されます構築、あなたがダウンロードした場合、今nightly builds of 3.1

を使用してそれを試してみて、最新でdemo build from Gradle's githubを実行することができます。demo video of both approachesを参照して、深い理解のために

$ gradle build 
[composite-build] Configuring build: C:\Users\Shvets\repos\composite\projectB 
[composite-build] Configuring build: C:\Users\Shvets\repos\composite\projectC 
:compileJava 
:projectB:b1:compileJava 
:projectB:b1:processResources UP-TO-DATE 
:projectB:b1:classes 
:projectB:b1:jar 
:projectB:b2:compileJava 
:projectC:compileJava 
:projectC:processResources UP-TO-DATE 
:projectC:classes 
:projectC:jar 
:projectB:b2:processResources UP-TO-DATE 
:projectB:b2:classes 
:projectB:b2:jar 
:processResources UP-TO-DATE 
:classes 
:jar 
:assemble 
:compileTestJava UP-TO-DATE 
:processTestResources UP-TO-DATE 
:testClasses UP-TO-DATE 
:test UP-TO-DATE 
:check UP-TO-DATE 
:build 

BUILD SUCCESSFUL 

Total time: 4.497 secs 

関連する問題