2016-05-24 10 views
0

Zip/Tar配布を生成する必要がある非常に似た(Java以外の)いくつかのプロジェクトがあります。一般に、各プロジェクトは単にdistributionsセクションを持ち、さまざまなファイル/ディレクトリをコピーし、アーカイブをアセンブルします。私は別の "共通の"プロジェクトに共通のコードを抽出したいのですが、必要なフレーバーに基づいて1つのアーカイブを生成できるように、子プロジェクトからビルドを実行します。共通コードは単にアーカイブに含める必要があるディレクトリですGradleマルチプロジェクトの個別配布

おそらく、複数のディストリビューションを生成するために親からビルドを実行することはありません。

まず共通ファイルをコピーしてから、子プロジェクトからファイルを追加/上書きする必要があります。私はsamples/userguide/multiprojectの例を見て、フラットな構造を使いたいと思っています。しかし、これらの例は非常にスパルタンですので、どの例も非常に高く評価されます!

答えて

1

あなたは私はあなたが分布プラグインを使用していることを前提と疑問に書かれたものから、このサンプルプロジェクトhttps://github.com/fanick1/so-individual-distributions-for-gradle-multi-project

に見てください。

commonProject/src/ 
    - commonFiles/ 
    - customFiles/customFile.txt 

と基本的に同じである2つのプロジェクト(PROJECTAProjectBの):

リポジトリはのは、共通のコンテンツを言わせて一つのプロジェクト( commonProject)からなるマルチプロジェクトが含まれています
project[A|B]/src/ 
    - customFiles/customFile.txt 
    - files[A|B]/ 

を実行すると、/build/distributionsフォルダ内の各サブプロジェクトに配布用zipファイルが作成されます。 子プロジェクトにはcustomFilesというフォルダーがあり、commonProjectにもあります。出力ZIPファイルの内容は、同じ名前のファイルがある場合、それぞれの子プロジェクトのコンテンツによって最終的に上書きされます。 基本的には、ファイル/customFiles/customFile.txtが上書きされるということです。 /commonFilesの内容は、常に子プロジェクトの配布用zipファイルにコピーされます。 これが役立つことを願っています。

+0

ありがとうございます!あなたのコードを調べています。あなたの例では、マスタープロジェクトが子プロジェクトを入れ子にしているようです。要件の1つは、プロジェクトがフラットな構造を使用しているため、「commonProjectもマスタープロジェクトです。これはできますか? – Bostone

+0

_」の意味によっては、プロジェクトはフラットな構造を使用するため、 commonProjectもマスタープロジェクトです_ "必要な変更は異なる場合があります。しかし、答えはおそらくどのような場合でもはいでしょう。たとえばcommonProject内で 'settings.gradle'の' includeFlat( "projectA") 'を実行し、' commonProject'の内部から 'gradle distZip'を開始することができます。すべてのgradleファイルを 'commonProject'に移動し、' settings.gradle'の 'includeFlat'に切り替えるだけです。 プロジェクトのうち1つだけをビルドしたい場合は、例えば 'gradlew:projectA:distZip'のように実行することもできます。 – Fanick

+0

あなたの助けをありがとう、賞金をお楽しみください! – Bostone

関連する問題