2011-01-27 13 views
12

私はAntからGradleまで比較的小さなプロジェクトを変換しています。私はビルドスクリプトの行数を約75%削減することを期待しています!Gradleを使用してソースのZIPを作成するにはどうすればよいですか?

Antビルドが行うことの1つは、ソースZIP(つまり、プロジェクト全体のZIP、特定のビットの削除 - 。ビルド、さまざまなEclipseフォルダなど)を生成することです。これをGradleに移行する間に、後で偶然に物が含まれないように、「排他的」なアプローチではなく「包括的な」アプローチを使用してください。

ディレクトリを明示的にリストすることなくすべてのソースセットのソースコードとリソースを取得したいと思っていますが、動作させることはできません。ここで

は、私がこれまで持っているものです(でも実行されません!):

task srcZip(type: Zip) { 
    classifier = 'src' 
    from projectDir 
    include { 
     sourceSets.collect { 
      it.allSource.asPath 
     } 
    } 
} 

ZIPファイルはフォルダ 'のsrc /メイン/ javaの/ ...'、「SRC /メインで終わる必要があります/ resources/... '、' src/test/java/... 'など、後でソースセットを追加するときにこのタスクを再訪する必要はありません。

ありがとうございます!それはあなたががを求めたディレクトリ構造を与えることはありません

task srcZip(type: Zip) { 
    classifier = 'src' 
    from sourceSets*.allSource 
} 

:あなたはこれを使用することができます1つのzipファイルにすべてのソースを取得するには

答えて

19

。すべてのソースセットのファイルは、同じ階層に配置されます。

は、あなたがこれを使用することができますのためにあなたが尋ねたものを手に入れるには:

task srcZip2(type: Zip) { 
    classifier = 'src' 
    from projectDir 
    include 'src/**/*' 
} 

はもちろん、それは考慮にあなたがソースディレクトリの場所になるかもしれないすべての変更を取ることはありません。

+0

うん...しかし、それは私がちょっと感じている...汚い!答えをありがとう。私は数日で私の要求に合った答えを得られなければ、あなたに代理人を授与します。再度、感謝します。 – dty

+0

私はあなたのことを知っています。私はあなたが望むディレクトリ構造を作るために最初のフォームを同軸にしようとしましたが、できませんでした。 –

6

ので、21ヶ月後に、ここで私は、これは(Gradleの1.2で)動作させるためにやったことだ

task srcZip(type: Zip) { 
    classifier = 'src' 
    from projectDir 
    include sourceSets*.allSource.srcDirs*.collect { relativePath(it) }.flatten() 
    include 'LICENCE', 'README', 'NOTICE', 'gradlew*' 
} 
assemble.dependsOn(srcZip) 
私のGroovy-FUは強くないので、私は確信している

その途中で恐ろしいビット単純化することができますが、今のところうまくいきます!

+0

sourceSets * .allSource.srcDirs * .collect {relativePath(it)+ "/**/*.*"} .flatten() これ以外の場合、ソースフォルダは取得されますが、 Gradle 2.1。 –

+0

こんにちは、これを達成するためにカスタムのgradleプラグインプロジェクトを使用していますが、このコード(直接使用されている場合)は私のためには機能しません。それはクラシファイアでエラーを出し、削除するとエラーになります:No projectDir found。どのように私のコードを動作させることができる任意のアイデア。 – sver

4

ここでソースコードのzipを作成する別の方法があります。要件ごとにファイルを含める/除外することができます。私が使用していたカスタムプラグインの場合に動作し、この作業を行う方法を考え出すのに多くの時間を費やしました。最後に、私は以下のコードを使用してそれを達成することができました:

Task taskSourceZip = project.task("makeSourceZip", type:Zip){ 
     baseName = "sourceZip" 
     from (project.rootDir){ 
      exclude ('*/*.iml') 
      exclude 'sourceZip.zip' 
     } 
     destinationDir project.rootDir 
    } 
関連する問題