2013-05-04 5 views
7

私のプロジェクトに新しいタスクを作成して、自分のプロジェクトのクラスファイルと(シェードジャー、またはファットジャーとも呼ばれます)。Gradle: 'clone'元のjarタスク依存関係を含むjarの新しいタスクを作成する

のGradleの料理によって提案された解決策は、JavaPluginの標準のjarタスクを変更します。

jar { 
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } 
} 

しかし、私はそれがあるとして、元のjar taksを維持したいとshaeded JARの追加のタスクを持っているでしょう、正確ジャータスクのように振る舞うが、

from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } 

に応じて追加のファイルが含まれており、別の分類器(「影」)を持つタスク、すなわち。

私はこのような性質をコピーすることにより、ジャータスクの設定を引き継ぐことを試みた:

task shadedJar(type: Jar, dependsOn: configurations.compile) { 
    dependencies = tasks.jar.taskDependencies 
    source = tasks.jar.source 
    manifest = tasks.jar.manifest 
    includes = tasks.jar.includes 
    classifier = 'shaded' 

    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } 
} 

しかし、結果のタスクは「瓶」の依存関係を引き継ぐず、結果としてjarファイルが含まれていません。プロジェクトのクラスファイル。さらに、このアプローチは、既存のタスクを新しいタスクのテンプレートとして使用することをお勧めします。

具体的なニーズ(別々のshadedJarタスク)と、タスクを一般的な追加タスクのテンプレートとして使用するための「クローニング」タスクには、どのような推奨アプローチがありますか?

(私はGradleの1.3上で、現在はまだですが、現在のGradleのバージョンのためのソリューションも歓迎)

答えて

8

タスクのクローンを作成する組み込みの方法はありません。しかし、それはjavaプラグインのjarタスクと同じファイルをインクルードするfatJarタスクを設定するのは簡単です:は自動的に必要なタスクの依存関係を確立するオートワイヤリング

task fatJar(type: Jar) { 
    appendix = "fat" 
    from sourceSets.main.output // that's it 
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } 
} 

タスク。

ビルドスクリプトがjarタスクをカスタマイズするために行く場合は、同時に両方のタスクにカスタマイズを適用することができます

configure([jar, fatJar]) { 
    version = "2.0" 
    entryCompression = "STORED" 
} 

jarタスクの場合とは異なり、あなたは「テンプレート」を定義している、場合、自分自身ファクトリメソッドで「インスタンス化」することができます。

def getMeAnotherOne(String name) { 
    task(name, type: Jar) { 
     version = "2.0" 
     entryCompression = "STORED" 
    } 
} 

getMeAnotherOne("jar1") 
getMeAnotherOne("jar2") 
関連する問題